Comment gérer un code retour d'une procédure SQL serveur en VB

Comment gérer un code retour d'une procédure SQL serveur en VB - VB/VBA/VBS - Programmation

Marsh Posté le 10-04-2006 à 12:07:02    

Bonjour,
 
j'essaye d'appeler une procedure sql serveur en VB avec un code de retour, mais je n'y arrive pas. => ma fonction append ne marche pas :(
 
 
 
Private Sub Command1_Click()
 
Dim oRs As ADODB.Recordset
Dim oCmd As ADODB.Command
Set oCmd = New ADODB.Command
Dim oParam As ADODB.Parameter
Dim szRetour As String
 
USER = "user"
PASSWORD = "password"
DATABASE = "database"
SERVEUR = "serveur"
 
 
Call InitialiseChaineConnexion(cnx)
 
Set oCmd = New ADODB.Command
 
Set oCmd.ActiveConnection = cnx
oCmd.CommandType = adCmdStoredProc
oCmd.CommandText = "[" & DATABASE & "].[" & USER & "].[MAJ_EXPORT_LOT]"
'Définition du paramètre retournant la valeur renvoyée par la procédure stockée
Set oParam = oCmd.CreateParameter("E_RETURN", adInteger, adParamReturnValue, 0, lRetour)
'oCmd.Parameters.Append (oParam) 'ne marche pas et si je ne le met pas j'ai un message comme quoi la procedure attend le parametre E_RETURN  :??:  
 
 
'oCmd.CommandText = "[" & DATABASE & "].[" & USER & "].[MAJ_EXPORT_LOT] " & szNumLot & ", @E_RETURN OUTPUT "
Set oCmd.ActiveConnection = cnx
oCmd.Execute
Set oCmd = Nothing
 
'Affichage de la valeur renvoyée par la procédure stockée
MsgBox oCmd.Parameters.Item("E_RETURN" ).Value
'oRs.Close
cnx.Close
 End Sub
 
 
 
 
voici ma procedure stockés:
 
CREATE    PROCEDURE RSGDF.MAJ_EXPORT_LOT (@E_RETURN integer OUTPUT)  AS DECLARE @CPT INTEGER;  
DECLARE @E_NOM As varchar(50)
set @E_NOM = 'toto'
 
SELECT @CPT = (SELECT COUNT(@E_NOM) FROM Export_Lot WHERE E_NOM = @E_NOM)  
 
IF @CPT = 0  
 INSERT INTO Export_Lot(E_NOM, E_CPT)  VALUES (@E_NOM, 1)  
ELSE  
 BEGIN  
  SELECT @CPT = (SELECT E_CPT+1 FROM Export_Lot WHERE E_NOM = @E_NOM)  
  UPDATE Export_Lot SET E_CPT = @CPT WHERE E_NOM = @E_NOM  
 END  
 
set @E_RETURN = 'rr'
GO


Message édité par molarisapa le 10-04-2006 à 15:00:15
Reply

Marsh Posté le 10-04-2006 à 12:07:02   

Reply

Marsh Posté le 10-04-2006 à 13:43:36    

j'ai édité mon message car au depart je faisais ca avec un fonction, j'arrivais a récuperer ma valeur, mais vu que je doit faire des insert/update je doit faire ca avec une procédure finallement


Message édité par molarisapa le 10-04-2006 à 14:59:18
Reply

Marsh Posté le 10-04-2006 à 15:23:10    

ouf ayé
j'ai réussi
yavait pas mal d'erreur dans mon code
 
 
voici un code complet qui marche:
 
****************** VB ****************
 
Public USER As String
Public PASSWORD As String
Public DATABASE As String
Public SERVEUR As String
 
Public cnx As ADODB.Connection
 
Public Function InitialiseChaineConnexion(ByRef cnx As ADODB.Connection) As Boolean
    'On se connecte a la base de reference
    On Error GoTo ConnectError
     
    Set cnx = New ADODB.Connection
 
    'Définition de la chaîne de connexion
    cnx.ConnectionString = "UID=" & USER & ";PWD=" & PASSWORD & ";" & "DRIVER={SQL Server};Server=" & SERVEUR & ";Database=" & DATABASE & ";"
    'Fermeture de la base de données
    cnx.Open
    InitialiseChaineConnexion = True
    Exit Function
ConnectError:
    MsgBox "Erreur lors de l'ouverture de la base de donnée : " & Err.Description, vbCritical
    InitialiseChaineConnexion = False
End Function
 
Private Sub Command1_Click()
 
Dim oRs As ADODB.Recordset
Dim oCmd As ADODB.Command
Set oCmd = New ADODB.Command
Dim oParam As ADODB.Parameter
Dim szRetour As String
Dim j as integer
 
USER = "user"
PASSWORD = "password"
DATABASE = "database"
SERVEUR = "serveur"
 
 
Call InitialiseChaineConnexion(cnx)
 
Set oCmd = New ADODB.Command
 
Set oCmd.ActiveConnection = cnx
oCmd.CommandType = adCmdStoredProc
oCmd.CommandText = "[" & DATABASE & "].[" & USER & "].[MAJ_EXPORT_LOT]"
'Définition du paramètre retournant la valeur renvoyée par la procédure stockée
Set oParam = oCmd.CreateParameter("E_RETURN", adInteger, adParamOutput, , 1)
Call oCmd.Parameters.Append(oParam)
Set oParam = oCmd.CreateParameter("E_NOM", adChar, adParamInput, 50, "VAL2" )
Call oCmd.Parameters.Append(oParam)
 
 
'oCmd.CommandText = "[" & DATABASE & "].[" & USER & "].[MAJ_EXPORT_LOT] " & szNumLot & ", @E_RETURN OUTPUT "
Set oCmd.ActiveConnection = cnx
oCmd.Execute
 
'Affichage de la valeur renvoyée par la procédure stockée
j = oCmd.Parameters.Item("E_RETURN" ).Value 'retour 4
'oRs.Close
cnx.Close
 End Sub
 
 
******************* SQL SERVEUR ********************
 
SET QUOTED_IDENTIFIER OFF  
GO
SET ANSI_NULLS OFF  
GO
 
 
ALTER     PROCEDURE RSGDF.MAJ_EXPORT_LOT (@E_RETURN integer OUTPUT, @E_NOM varchar(50))  AS  
DECLARE @CPT INTEGER;  
 
set @E_RETURN = 9
 
SELECT @CPT = (SELECT COUNT(@E_NOM) FROM Export_Lot WHERE E_NOM = @E_NOM)  
 
IF @CPT = 0  
 INSERT INTO Export_Lot(E_NOM, E_CPT)  VALUES (@E_NOM, 1)  
ELSE  
 BEGIN  
  SELECT @CPT = (SELECT E_CPT+1 FROM Export_Lot WHERE E_NOM = @E_NOM)  
  UPDATE Export_Lot SET E_CPT = @CPT WHERE E_NOM = @E_NOM  
 END  
 
set @E_RETURN = 4
GO
SET QUOTED_IDENTIFIER OFF  
GO
SET ANSI_NULLS ON  
GO


Message édité par molarisapa le 10-04-2006 à 15:24:45
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed