Executer une procédure SQL depuis VBA

Résolu/Fermé
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 - 16 mai 2017 à 00:17
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018 - 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!!

2 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
16 mai 2017 à 07:04
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.....
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
Modifié le 16 mai 2017 à 14:45
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://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.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
16 mai 2017 à 16:30
Re,
Oui, mais pour transact-sql
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
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?
0
GermPeru Messages postés 172 Date d'inscription mercredi 7 décembre 2016 Statut Membre Dernière intervention 27 mars 2018
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...
0