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
Partager