Bonjour a tous

Delphi 7
SQLServer 2000

Mon problème :

J'essaie de monter une procédure stockée qui a pour but d'incrémenté un compteur dans une table et d'aller récupérer ce numéro.

voici ma procédure stockée :


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
21
22
23
CREATE PROCEDURE "SP_GENERATOR" 
(
  @TABLENOM  D_NOM,
  @AVALUE D_NUMID OUTPUT
 
)
as
begin
    UPDATE TABLE_CPT SET CPT = CPT + 1 WHERE NOM=@TableNom;
    DECLARE C CURSOR
    FOR SELECT CPT 
    FROM   TABLE_CPT 
    WHERE  NOM = @TABLENOM;
 
    OPEN C;
    FETCH C INTO   @AVALUE;
    WHILE @@FETCH_STATUS = 0 BEGIN
       FETCH C INTO   @AVALUE;
    END
    CLOSE C;
    DEALLOCATE C;
end;
GO

Dans delphi voici mon code :


Code : 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
21
22
23
24
25
26
function GetSQLGenerator(aTableName: string): LongInt;
var Q : TSQLStoredProc;
var p1 ,p2 : TPAram;
begin
   result := -1
   Q := nil;
   with Q do
   try
     Q1 := CreateQueryFmt ('execute SP_GENERATOR %s, %d;',[QuotedSQL(aTableName), result]);
     q := CreateStoredProc('SP_GENERATOR'); // Crée un StoredProc avec un SQLconnexion approprié
     StoredProcName := 'SP_GENERATOR';
     Params.Clear;
     P1 := TParam.Create(Params, ptInput);
     p1.Name := 'TABLENOM';
     Q.ParamByname('TABLENOM').Value := aTableName;
     P2 := TParam.Create(Q.Params, ptInputOutput);
     p2.Name := 'VALUE';
     Q.ParamByname('VALUE').Value := result;
     q.ExecProc;
     result := Q.ParamByname('VALUE').AsInteger;
   finally
     p1.Free;
     p2.Free;
     FreeAndNil(q);
   end;
end;

Mon problème est que ma procedure stockée ne renvoie jamais de valeur dans la variable @AVALUE qui est pourtant en OUPUT.

D'autre part dans l'analyseur de requet SQL , je teste ma procédure...
mais sans résultat convainquant.

Code :

Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
begin
declare @toto int;
execute SP_GENERATOR 'ARMATEUR' , @toto;
print @toto;
end;

Ce script ne renvoie jamais rien , or si j'inclue dans ma procédure stockée
un print @AVALUE , le serveur SQL me renvoie la bonne valeur.

Après quelques jours de lutte , je suis perdu.
En espérant trouvé de l'aide de votre part. Merci d'avance