Bonjour,
J'utilise, ou plutôt je teste, depuis peu les composants UIB 2.5 afin de laisser tomber le BDE et pouvoir utiliser Firebird petit à petit et laisser tomber IB 7.1
Mais je n'arrive pas à bien gérer mes procédures stockées, voilà une exemple :
la procédure :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 CREATE PROCEDURE "RESERVEDOC" RETURNS ( "NEWKEY" INTEGER ) AS BEGIN SELECT COUNT(*) FROM DOC_TETE INTO :NewKey; IF (NewKey=0) THEN BEGIN NewKey=1; END ELSE BEGIN SELECT MAX(CLE) FROM DOC_TETE INTO :NewKey; NewKey=NewKey+1; END INSERT INTO DOC_TETE (CLE) VALUES (:NewKey); END
Je l'appelle comme ça :
Si je fais comme ça j'ai une violation d'accès, car il n'y a apparemment aucun paramètre renseigné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 1: FIB := TUIBQuery.Create(nil); 2: FIB.BuildStoredProc('RESERVEDOC'); 3: FIB.Open; 4: Cle := FIB.Params.ByNameAsInteger('NewKey');
Mais si je change la ligne 4 de cette façon :
Ca ne plante pas, mais par contre Cle=0 alors que elle ne devrait pas... Alors qu'avec un TStoredProc (BDE) ca renvoie la bonne valeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 4: Cle := FIB.Fields.ByNameAsInteger('NewKey');
Une idée ?
Partager