Executer une procédure SQL depuis VBA
Résolu
GermPeru
Messages postés
175
Statut
Membre
-
GermPeru Messages postés 175 Statut Membre -
GermPeru Messages postés 175 Statut Membre -
Bonjour a tous,
Je cherche a executer une procédure SQL depuis VBA. Je tiens a préciser que je débute en SQL et un peu moins en VBA, donc exuser moi et corriger moi si je dis des bétises.
Le sujet a été traité plusieurs fois mais je ne comprends pas mon message d´erreur.
Je vais essayé d´être le plus précis possible:
1- J´ai un module de classe avec des fonctions pour pour "jouer" avec ma connection
Je cherche a ce que ma fonction suivante puisse executer la procédure stockée en SQL
Ensuite j´appele ma fonction de la maniere suivante depuis un USF pour tester ma connection et pour tester mon recordset:
Mon message d´erreur:

et si je comprends bien il me dit que mon champs "@MP" n´est pas ajouté, et lorsque je mets ce parametre de ma fonction en commentaire Prm1.Name = "@MP", bah j´ai le meme message d´erreur.
Ce qui me fait penser quer l´erreur pourrait provenir de mon script SQL, mais lrsque j´execute ma procedure depuis SQL cela fonctionne. Ce qui fait que je suis un perdu et pas d´idée...
Au cas ou ma procedure SQL est la suivante:
J´ai essayé de définir ma variable de la meme facon en vba que en SQL, mais j´ai trés certainement fait une erreur donc si klk a réussi a terminer ce message et se rendre compte de mon erreur je le félicite et le remercie par avance de m´indiquer ou!!
Merci Forum!!
Je cherche a executer une procédure SQL depuis VBA. Je tiens a préciser que je débute en SQL et un peu moins en VBA, donc exuser moi et corriger moi si je dis des bétises.
Le sujet a été traité plusieurs fois mais je ne comprends pas mon message d´erreur.
Je vais essayé d´être le plus précis possible:
1- J´ai un module de classe avec des fonctions pour pour "jouer" avec ma connection
Je cherche a ce que ma fonction suivante puisse executer la procédure stockée en SQL
Public Function OpenRecordSetParametre(Procedure As String, Param1 As String) 'On Error Resume Next If Connexion.State = 0 Then OpenConnetion End If Set Cmd = CreateObject("ADODB.Command") Cmd.ActiveConnection = Connexion Cmd.CommandType = 4 Cmd.CommandText = Procedure Set Prm1 = CreateObject("ADODB.Parameter") Prm1.Value = Param1 Prm1.Name = "@MP" Prm1.Type = 200 Prm1.Direction = 4 Prm1.Size = 15 'Set OpenRecordSetParametre = CreateObject("ADODB.Recordset") Set OpenRecordSetParametre = Cmd.Execute Set Cmd = Nothing Set Prm1 = Nothing If Err Then 'MsgBox Err.Description Set OpenRecordSetParametre = Nothing End If Err.Clear On Error GoTo 0 End Function
Ensuite j´appele ma fonction de la maniere suivante depuis un USF pour tester ma connection et pour tester mon recordset:
Private Sub CommandButton1_Click() Dim Con As New ADODBRD 'nom de mon module de classe Con.BASETYPE = SQLSERVER2005 Con.MonServer = "BLADELAB01" Con.Database = "SBO_PORTUGAL_PRODUCCION" Con.MonUser = "etiquetas" Con.MonPassword = "francia" Con.OpenConnetion MsgBox Array("No bueno!", "Bueno !")(Abs(Con.OpenConnetion)) Set RS = Con.OpenRecordSetParametre("SBO_SP_LP_Comprometidos", "MP-00016-LP") MsgBox Array("No bueno!", "Bueno !")(Abs(TypeName(RS) <> "Nothing")) If Not RS Is Nothing Then RS.Close Con.CloseConnection Set RS = Nothing End Sub
Mon message d´erreur:

et si je comprends bien il me dit que mon champs "@MP" n´est pas ajouté, et lorsque je mets ce parametre de ma fonction en commentaire Prm1.Name = "@MP", bah j´ai le meme message d´erreur.
Ce qui me fait penser quer l´erreur pourrait provenir de mon script SQL, mais lrsque j´execute ma procedure depuis SQL cela fonctionne. Ce qui fait que je suis un perdu et pas d´idée...
Au cas ou ma procedure SQL est la suivante:
USE [SBO_PORTUGAL_PRODUCCION] GO /****** Object: StoredProcedure [dbo].[SBO_SP_LP_Comprometidos] Script Date: 15/05/2017 4:08:26 p. m. ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER Procedure [dbo].[SBO_SP_LP_Comprometidos] @MP varchar(15) as Select O.docentry, O.DocNum 'OP', O.status 'Estado', O.ItemCode 'Padre', P.ItemName 'Padre Desc', O.U_numLot 'Lote', O.PlannedQty, O.PostDate, O.duedate, W.ItemCode, P1.ItemName, convert(varchar(15),W.BaseQty) 'Consumo Base', W.PlannedQty 'Reservado' From OWOR O inner join WOR1 W on O.DocEntry = W.DocEntry inner join OITM P on P.ItemCode = O.ItemCode inner join OITM P1 on P1.ItemCode = W.ItemCode Where O.Status <> 'C' and w.IssuedQty = 0 and W.ItemCode = @MP
J´ai essayé de définir ma variable de la meme facon en vba que en SQL, mais j´ai trés certainement fait une erreur donc si klk a réussi a terminer ce message et se rendre compte de mon erreur je le félicite et le remercie par avance de m´indiquer ou!!
Merci Forum!!
A voir également:
- Exécuter une requête sql en vba excel
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Mise en forme conditionnelle excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
2 réponses
Bonjour,
de la meme facon en vba que en SQL,
une infos sur Excel:
les noms de variable ne doivent pas contenir de caractère spéciaux et @ en est un.....
de la meme facon en vba que en SQL,
une infos sur Excel:
les noms de variable ne doivent pas contenir de caractère spéciaux et @ en est un.....
Pour ceux que cela interesse j´ai trouvé réponse sur un autre forum mais cela fonctionne et s adapte au besoin:
https://www.developpez.net/forums/d1697339/logiciels/microsoft-office/excel/macros-vba-excel/executer-procedure-sql-vba/
Code source Dysorthographie, ce mec est génial!
https://www.developpez.net/forums/d1697339/logiciels/microsoft-office/excel/macros-vba-excel/executer-procedure-sql-vba/
Code source Dysorthographie, ce mec est génial!
Ca faisait longtemps que tu ne m´avais pas aidé!
Erreur de débutant en espérant que cela soit la raison ou une des raisons de mon probleme, donc aurais tu une suggestion pour déclarer de facon plus adécuate mes variables en SQL?
Car sur l´aide microsoft https://docs.microsoft.com/fr-fr/sql/t-sql/language-elements/declare-local-variable-transact-sql?redirectedfrom=MSDN&view=sql-server-ver15
ils disent ceci:
Arguments
@variable_locale
Nom d'une variable. Les noms de variables doivent commencer par le signe @. Noms de variables locales doivent respecter les règles de identificateurs.
Oui, mais pour transact-sql