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