Signaler

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

Posez votre question GermPeru 99Messages postés mercredi 7 décembre 2016Date d'inscription 25 mai 2017 Dernière intervention - Dernière réponse le 16 mai 2017 à 19:27 par GermPeru
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 
Utile
+0
plus moins
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 99Messages postés mercredi 7 décembre 2016Date d'inscription 25 mai 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.
Répondre
f894009 11674Messages postés dimanche 25 novembre 2007Date d'inscription 24 mai 2017 Dernière intervention - 16 mai 2017 à 16:30
Re,
Oui, mais pour transact-sql
Répondre
GermPeru 99Messages postés mercredi 7 décembre 2016Date d'inscription 25 mai 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?
Répondre
GermPeru 99Messages postés mercredi 7 décembre 2016Date d'inscription 25 mai 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...
Répondre
Donnez votre avis
Utile
+0
plus moins
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!
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !