Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2007, 19h21   #1
Membre actif
 
Inscription : décembre 2004
Messages : 294
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 294
Points : 199
Points : 199
Par défaut Pbm avec Stored Proc.

Bonsoir,

Je suis novice en FB. J'ai le problème suivant :

J'ai écris uns procédure stockée qui tourne bien quand je la lance la 1ère fois. Cependant, dés que je l'exécute les fois suivantes j'ai un message d'erreur m'indiquant que les paramètres de cette procédure sont manquants !

Voici le code D5, XP, FB Embeded 1.5:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
procedure TfrmFact.GetCA
var
  totCA : Currency;
begin
  mySP_CA.ParamByName('MYCLIENT').AsString := edClient.Text;
  mySP_CA.ParamByName('MYDATE').AsDateTime := edDate.Date;
  mySP_CA.StoredProcName := 'GETCA';
  mySP_CA.ExecProc;
  totCA := mySP_CA.ParamByName('MYCA').asCurrency;
  mySP_CA.Close;
end;
Merci à vous.
akli_agha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 21h05   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Que cherches-tu à faire avec ce code ?
Code :
totCA := mySP_CA.ParamByName('MYCA').asCurrency;
et quel est le code de la procédure ?
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 21h35   #3
Membre actif
 
Inscription : décembre 2004
Messages : 294
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 294
Points : 199
Points : 199
Au fait, je récupère le Chiffre d'affaire d'un client à une date donnée.
Et voici le code de la SP.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
SET TERM ^ ;
 
CREATE PROCEDURE GETCA (
    myclient char(4),
    mydate date)
returns (
    myca decimal(15,2))
AS
begin
   SELECT SUM(MTHT + MTTVA + MTTMB)
   FROM FENT
   WHERE CLIENT=:MyClient AND DFACT<=:mydate
   INTO myCA;
  suspend;
end^
 
SET TERM ; ^
Et merci.
akli_agha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 22h49   #4
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
As-tu essayé avec
Code :
totCA := mySP_CA.FieldByName('MYCA').asCurrency;
ou encore
Code :
totCA := mySP_CA.FIELD[0].value;
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2007, 21h35   #5
Membre actif
 
Inscription : décembre 2004
Messages : 294
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 294
Points : 199
Points : 199
Salut,

En fait le problème ne réside pas à ce niveau ! Il se trouve que quant j'exécute les fois suivantes la procédure stockée, elle ne réponds pas. J'ai un message d'informant que je n'ai pas fourni les paramètres requis !

D5, ZEOS, XP.

J'ai résolu le pépin en utilisant un TZQuery mais je souhaiterais comprendre le pourquoi de la chose !

Merci quand même.
akli_agha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 07h50   #6
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 629
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 629
Points : 4 531
Points : 4 531
pour moi c'est le execproc qui est incorrect , il faut plutot faire

Code :
1
2
 
SELECT * FROM GETCA
comme s'il s'agissait d'une table renvoyant un ensemble d'enregistrement (SUSPEND ) .
ceci dit puisque la procedure ne semble pas envoyé plus d'un enregistrement c'est inutile , tout comme le SUSPEND (si encore il y avait un group by ) .
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/10/2007, 23h57   #7
Membre actif
 
Inscription : décembre 2004
Messages : 294
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 294
Points : 199
Points : 199
Bonsoir,

Code :
1
2
 
SELECT * FROM GETCA
Cette synthaxe fonctionne avec un TZQuery et non avec un TZStoredProc. !
Ce dernier a besoin, comme arguments, le nom de la SP et les paramètres d'entrées et de sorties.

Tous ces params étant fournis :
- 1ére exécution tout baigne !
- 2éme exécution, Message : Valeurs des paramètres en entrées absents !
Idem pour les 3éme, 4éme ... fois.

Bon !

PS : Il sert à quoi les SUSPEND ???

Merci.
akli_agha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2007, 00h47   #8
Membre éclairé
 
Avatar de TryExceptEnd
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 435
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2006
Messages : 435
Points : 347
Points : 347
Et si le probleme venait du composant (TZStoredProc) que tu utilise ?
__________________
Si vous êtes libre, choisissez le Logiciel Libre.
TryExceptEnd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2007, 08h07   #9
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 629
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 629
Points : 4 531
Points : 4 531
Citation:
Envoyé par akli_agha Voir le message
Cette synthaxe fonctionne avec un TZQuery et non avec un TZStoredProc. !
Ce dernier a besoin, comme arguments, le nom de la SP et les paramètres d'entrées et de sorties.
Je ne connais pas ces composants TZ.... (Zeos ?) donc j'aurais tendance à rejoindre TryExceptEnd

Citation:
Envoyé par akli_agha Voir le message
PS : Il sert à quoi les SUSPEND ???
Dans le cas de ta procedure strictement à rien c'est d'ailleurs peut-etre la le probléme . pour simplifié je dirait que SUSPEND sert lorsque la procédure renvoi un ensemble de données . pour reprendre ton cas

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE PROCEDURE GETCA (
     mydate date)
returns (
    myClient char(4),
    myca decimal(15,2))
AS
begin
   SELECT CLIENT,SUM(MTHT + MTTVA + MTTMB)
   FROM FENT
   WHERE DFACT<=:mydate
   GROUP BY CLIENT
   INTO myClient,myCA;
  suspend;
end^
retournerais tous les clients avec leur CA

PS . Non testé
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2007, 21h14   #10
Membre actif
 
Inscription : décembre 2004
Messages : 294
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 294
Points : 199
Points : 199
Bonsoir,

Merci les gars !

Je pense, aussi, que ca vient du composant Zeos ! De toute facon j'ai contourné cet aléa avec un Query qui fonctionne correctement. Je fouinerai un plus dans le composant dés que j'ai un peu de temps.

Pour Sergio... concernant SUSPEND.
Dans la procédure suivante :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
CREATE PROCEDURE GETCA (
     mydate date)
returns (
    myClient char(4),
    myca decimal(15,2))
AS
begin
   SELECT CLIENT, SUM(MTHT + MTTVA + MTTMB)
   FROM FENT
   WHERE DFACT<=:mydate
   GROUP BY CLIENT
   INTO myClient,myCA;
   SUSPEND;
end^
Si SUSPEND est omis, que se passera t-il ?

Merci.
akli_agha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 09h18   #11
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 629
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : janvier 2007
Messages : 3 629
Points : 4 531
Points : 4 531
Autant pour moi
j'ai pris la peine de tester cette procédure le SUSPEND est bien nécessaire
par contre pour obtenir un resultat il faut bien faire

Code :
SELECT * FROM GETCA(ladate)
pour obtenir un ensemble de résultats

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
// nota j''ai un peu changer les noms pour faire le test
ALTER PROCEDURE GETCA (
    MYDATE Integer )
RETURNS (
    MYCLIENT Char(4),
    MYCA Numeric(15,2) )
AS
begin
  FOR SELECT F.CLIENT, SUM(F.MNT_TOT)
   FROM FACTURES F
   WHERE f.YM_FACTURE=:mydate
   GROUP BY CLIENT
   INTO myclient,myCA
  DO  BEGIN 
        SUSPEND;
      END
END^
oublier le SUSPEND ne renvoi rien du tout
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h15.


 
 
 
 
Partenaires

Hébergement Web