darb66
Messages postés36Date d'inscriptionlundi 28 juillet 2003StatutMembreDernière intervention23 juin 2008
-
14 janv. 2008 à 15:46
darb66
Messages postés36Date d'inscriptionlundi 28 juillet 2003StatutMembreDernière intervention23 juin 2008
-
15 janv. 2008 à 10:21
Bonjour à tous,
J'ai créé une macro dans Excel pour accéder une base de données SQL Server 2005. Comme le montre mon code ci-dessous, j'utilise les objets ADODB afin d'appeler une procédure stockée qui me retourne l'équivalent d'une requête "SELECT * FROM MaTable":
Dim f_strConn As String
Dim f_conn As ADODB.Connection
Dim f_cmd As ADODB.Command
Dim f_reco As ADODB.Recordset
Set f_conn = New ADODB.Connection
Set f_cmd = New ADODB.Command
Set f_reco = New ADODB.Recordset
f_conn.Open f_strConn
f_cmd.ActiveConnection = f_conn
f_cmd.CommandText = "SP_MyProcedure"
f_cmd.CommandType = adCmdStoredProc
f_cmd.Parameters.Append f_cmd.CreateParameter("@MyYear", _
adSmallInt, _
adParamInput, _
, _
2008)
Set f_reco = f_cmd.Execute
Do While Not f_reco.EOF
'...
Loop
J'obtiens un message d'erreur lors de l'execution du code "Do While Not f_reco.EOF" qui dit: L'opération pour un objet "fermé" n'est pas autorisé. Il me semble pourtant que ma connexion est correctement initialisée (Je l'ai testée avec d'autres requêtes) et que la fonction .Execute devrait bien me retourner un objet de type RecordSet! Est-ce que quelqu'un aurait une idée? Qu'ai-je donc oublié? Merci d'avance pour votre aide...
darb66
Messages postés36Date d'inscriptionlundi 28 juillet 2003StatutMembreDernière intervention23 juin 2008 14 janv. 2008 à 16:17
Ta remarque est pertinente si j'utilise une commande de type texte:
f_reco.Open "SELECT * FROM MyTable", f_conn
Cependant j'utilise l'objet ADODB.Command car j'appelle une procédure stockée et lui passe un paramètre:
f_cmd.ActiveConnection = f_conn
f_cmd.CommandText = "SP_MyProcedure"
f_cmd.CommandType = adCmdStoredProc
f_cmd.Parameters.Append f_cmd.CreateParameter("@MyYear", _
adSmallInt, _
adParamInput, _
, _
2008)
Comment puis-je faire pour tout de même ouvrir l'objet f_reco ouvert tout en utilisant l'objet f_cmd? Même en appelant "f_reco.Open" tout seul cela ne fonctionne pas
darb66
Messages postés36Date d'inscriptionlundi 28 juillet 2003StatutMembreDernière intervention23 juin 2008 15 janv. 2008 à 10:21
Effectivement, l'erreur vennait de la procédure stockée qui contenait la commande Create Table avant le Select. J'ai donc utilisé le code SQL SET NOCOUNT ON - au début de ma Procédure Stockée - qui est mentionné dans le fichier que tu proposes. Merci d'ailleurs pour le lien les infos présentées sont complètes et bien détaillées...