Executer une procédure SQL depuis VBA [Résolu]

GermPeru 166 Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention - 16 mai 2017 à 00:17 - Dernière réponse : GermPeru 166 Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention
- 16 mai 2017 à 19:27
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

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!!
Afficher la suite 
166Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention

6 réponses

Répondre au sujet
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention - 16 mai 2017 à 07:04
0
Utile
4
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.....
GermPeru 166 Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention - 16 mai 2017 à 14:43
Bonjour f894009,

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://msdn.microsoft.com/fr-fr/library/ms188927.aspx
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.
f894009 12541 Messages postés dimanche 25 novembre 2007Date d'inscription 11 décembre 2017 Dernière intervention > GermPeru 166 Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention - 16 mai 2017 à 16:30
Re,
Oui, mais pour transact-sql
GermPeru 166 Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention - 16 mai 2017 à 16:34
Tu me dis que le nom de mon champs en VBA ne doit pas etre la meme dénomination eque SQL?
GermPeru 166 Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention - 16 mai 2017 à 16:39
Au cas ou j´ai testé avec l enom sans le @, message d´erreur identique, de plus dans le message d´erreur il m´indique la procédure et le nom de ma variable avec la syntaxe SQL cad '@MP', je pense que je déclare mal mon parametre ou alors j´execute mal mon command...
Commenter la réponse de f894009
GermPeru 166 Messages postés mercredi 7 décembre 2016Date d'inscription 5 décembre 2017 Dernière intervention - 16 mai 2017 à 19:27
0
Utile
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!
Commenter la réponse de GermPeru