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 :
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');
Si je fais comme ça j'ai une violation d'accès, car il n'y a apparemment aucun paramètre renseigné.

Mais si je change la ligne 4 de cette façon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
4:     Cle := FIB.Fields.ByNameAsInteger('NewKey');
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.

Une idée ?