Comment gérer un code retour d'une procédure SQL serveur appelé a partir de VB
cs_opala
Messages postés34Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention19 novembre 2007
-
10 avril 2006 à 12:04
-
10 avril 2006 à 13:42
Bonjour,
j'ai dans un prog VB un appel a une procédure SQL serveur comme suit:
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.CommandText = "[" & DATABASE & "].[" & USER & "].[MAJ_EXPORT_LOT] " & szNumLot
Set cmd.ActiveConnection = cnx
cmd.Execute
Set cmd = Nothing
Avec la procédure SQL serveur suivante:
CREATE PROCEDURE RSGDF.MAJ_EXPORT_LOT (@E_NOM varchar(50)) AS DECLARE @CPT INTEGER;
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
J'aimerai pouvoir gérer un code retour de la procédure sql serveur, etre capable de renvoyer un boolean, ou un integer 0 ou 1, mais je ne sais pas comment faire le lien VB - SQL serveur
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 10 avril 2006 à 12:10
Salut,
Lorsque tu execute une commande, elle te retourne un recordset, essaie de voir si le contenu de ce Recordset ne possède pas dans l'un des champs, le valeur retournée par la procédure SQL.
Dim rs as ADODB.Recordset
Set rs = cmd.execute (ou un truc dans le style)
Voila en espérant que cela puisse t'aider un peu
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
cs_opala
Messages postés34Date d'inscriptionjeudi 9 octobre 2003StatutMembreDernière intervention19 novembre 2007 10 avril 2006 à 13:20
tout a fait, j'avais vu qu'on pouvait utilisé un objet recordset, mais souvent les exemples s'arretent a Set rst = cmd.Execute et je ne sais pas comment lire apres mes infos
j'ai essayé ca mais apres Set rst = cmd.Execute ca ne marche plus
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Set rst = New ADODB.Recordset
'on va acceder à la base pour mettre à jour le compteur de document du lot en cours
cmd.CommandText = "[" & DATABASE & "].[" & USER & "].[MAJ_EXPORT_LOT] " & szNumLot
Set cmd.ActiveConnection = cnx
Set rst = cmd.Execute
'ne marche pas
If Not rst.BOF And rst.EOF Then
rst.MoveFirst
MsgBox rst(0)
End If
j'utilisais une procédure SQL serveur, mais j'ai essayé avec une fonction, ca marche beaucoup mieu
voici le code
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 rs As ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Set rst = New ADODB.Recordset
'on va acceder à la base pour mettre à jour le compteur de document du lot en cours
cmd.CommandText = "SELECT [GDF_TIS].[dbo].[FN_FIRST_CAP]('olivier')"
Set cmd.ActiveConnection = cnx
rst = cmd.Execute
MsgBox (rst(0)) 'affiche OLIVIER
End Sub
CREATE FUNCTION FN_FIRST_CAP (@NAME VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
IF @NAME IS NULL
RETURN NULL
RETURN UPPER(@NAME)
END