ADODB avec les procédures stockées

Résolu
darb66 Messages postés 36 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 23 juin 2008 - 14 janv. 2008 à 15:46
darb66 Messages postés 36 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 23 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

f_strConn = "Provider=sqloledb;Data Source=MyServer;Initial Catalog=MyDB;User Id=MyUser;Password=MyPWD;"

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...

4 réponses

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
14 janv. 2008 à 17:21
Re,

Regarde ce fichier en téléchargement si cela peut t'aider...car là je ne vois pas..

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
14 janv. 2008 à 16:08
Salut,

Ben, justement...si ton object est fermé, c'est que tu l'ouvres pas justement...

f_reco.Open TaRequête, TaconnexionBdd

Enfin un truc du genre...

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
darb66 Messages postés 36 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 23 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
0
darb66 Messages postés 36 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 23 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...
0
Rejoignez-nous