Comment gérer un code retour d'une procédure SQL serveur en VB - VB/VBA/VBS - Programmation
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
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
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