Comment gérer un code retour d'une procédure SQL serveur appelé a partir de VB

cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 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

Quelqu'un aurait une idée?
merci d'avance

Olivier

3 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
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
0
cs_opala Messages postés 34 Date d'inscription jeudi 9 octobre 2003 Statut Membre Dernière intervention 19 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


Dim szNumLot As String


USER = "user"
PASSWORD = "password"
DATABASE = "mabase"
SERVEUR = "monserveur"


szNumLot = "titi"


Call InitialiseChaineConnexion(cnx)


'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


Set cmd = Nothing
Set rst = Nothing


End Sub
0
bon j'ai trouvé,

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


Dim szNumLot As String


USER = "user"
PASSWORD = "password"
DATABASE = "database"
SERVEUR = "serveur"


Call InitialiseChaineConnexion(cnx)


'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
0
Rejoignez-nous