Pb pour récuperer la valeur retournée par une SP SQL
Pb pour récuperer la valeur retournée par une SP SQL - VB/VBA/VBS - Programmation
MarshPosté le 04-05-2005 à 15:56:55
Alors voilà j'ai galéré un petit moment sur ce problème donc maintenant que j'ai la solution je vous en fait profiter... Le problème vient d'un bug en VBa qui veut que tout argument passé en OUTPUT dans une procédure stockée SQL et qui doit retourner une valeur retourne NULL à la place. Ainsi, il est plutôt difficile de savoir quand l'éxecution de la fameuse procédure stockée est arrivée à son terme ...
Il faut donc contourner le problème comme suit : procédure initiale sous sql create procedure sp_plop @debut varchar(30) @fin varchar(30) output as begin set @fin='valeur : ' + @debut end; procédure intermédiaire create procedure sp_plop2 @texte varchar(30) as begin declare @fin varchar(30) execute sp_plop @texte, @fin out select @fin end; Appel de la SP dans Access Sub get_proc() Dim rst As New ADODB.Recordset Dim strSQL As String Dim param As String param = "plop" rst.Open "sp_plop2 " + param, CurrentProject.Connection, adOpenStatic rst.MoveFirst strSQL = rst(0) strSQL = rst.Fields.Item(0) End Sub
strSQL contient maintenant la valeur retournée par la procédure sp_plop
Message édité par grandpretre le 29-07-2005 à 13:00:15
Marsh Posté le 04-05-2005 à 15:56:55
Alors voilà j'ai galéré un petit moment sur ce problème donc maintenant que j'ai la solution je vous en fait profiter...
Le problème vient d'un bug en VBa qui veut que tout argument passé en OUTPUT dans une procédure stockée SQL et qui doit retourner une valeur retourne NULL à la place.
Ainsi, il est plutôt difficile de savoir quand l'éxecution de la fameuse procédure stockée est arrivée à son terme ...
Il faut donc contourner le problème comme suit :
procédure initiale sous sql
create procedure sp_plop
@debut varchar(30)
@fin varchar(30) output
as
begin
set @fin='valeur : ' + @debut
end;
procédure intermédiaire
create procedure sp_plop2
@texte varchar(30)
as
begin
declare @fin varchar(30)
execute sp_plop @texte, @fin out
select @fin
end;
Appel de la SP dans Access
Sub get_proc()
Dim rst As New ADODB.Recordset
Dim strSQL As String
Dim param As String
param = "plop"
rst.Open "sp_plop2 " + param, CurrentProject.Connection, adOpenStatic
rst.MoveFirst
strSQL = rst(0)
strSQL = rst.Fields.Item(0)
End Sub
strSQL contient maintenant la valeur retournée par la procédure sp_plop
Message édité par grandpretre le 29-07-2005 à 13:00:15