"connection fermée ou non valide"

Résolu
sabou94 Messages postés 158 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 17 avril 2007 - 21 févr. 2005 à 11:44
sabou94 Messages postés 158 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 17 avril 2007 - 22 févr. 2005 à 09:35
bonjour,
voila mon probleme (en vb6) , pour remplir une combobox avec des données venant d'une base de données sql server, je fais ce code la :
Dim Rst_Sql As ADODB.Recordset
Set Cmd_PSSql = New ADODB.Command
Cmd_PSSql.ActiveConnection = Cls_Db_Me.Connexion----> l'erreur est ici
Cmd_PSSql.CommandType = adCmdStoredProc
Cmd_PSSql.CommandText = "PS_GET_ALL_ETAPES_ISO"
Set Rst_Sql = Cmd_PSSql.Execute
Set Cmd_PSSql = Nothing
If Not Rst_Sql.EOF Then
While Not Rst_Sql.EOF
Cbo_Etapes.AddItem Rst_Sql("ID_ETI"), Rst_Sql("LIBELLE_ETI")
Rst_Sql.MoveNext
Wend
End If
Rst_Sql.Close
Set Rst_Sql = Nothing
sachant que cls_db est déclaré dans option explicit en tant que module de classe pour la connection, et que je dois utiliser des procédures stockée (je suis en stage... ) et lorsque je lance mon appli, quand je clik sur ma combo, il me mlets cette erreur la : "impossible d'utiliser cette connexion pour effectuer cette opération, elle est fermée ou non valide pour ce contexte"
Et pourtant j'ai fais un copier collé de ce qui existait deja dans d'autres feuilles!
je ne comprends pas mon erreur, qqn peut -il m'aider???
merci d'avance....
sabrina

4 réponses

Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007
21 févr. 2005 à 22:53
Bonsoir Sabrina,

J'ai l'impression que tu te mélanges un peu les pinceaux ( Ne le prends pas mal...)
> Cls_Db_Me.Connexion = Cls_Db_Me.OpenDb
Lorsque tu affectes une valeur objet à une variable objet, tu dois utiliser Set ...
De plus, il faut que les objets soient de même type, sinon cela ne peut pas fonctionner. Ici, tu essaies d'affecter je ne sais trop quoi ( opendb n'est pas un objet mais une méthode ) à un objet connection... Donc problème

Je ne sais pas ce que représente Cls_Db_Me, mais si c'est un module de classe, je pense que c'est "du bricolage" que d'essayer d'externaliser un objet connection d'une classe.

Pour ma part, je reprendrais les choses à zéro et envisagerais deux possibilités :
1. Travailler avec un objet ADODB.Connection
Dans ce cas, tu peux travailler avec un objet connection générique, créé dans un module standard et initialisé, souvent, dans sub Main qui se lance au lancement de l'application ( le plus souvent, ...)
Pour cela, dans un module standard, dimensionne ton objet
Public MaConnexion as ADODB.Connection

Sub Main
Set MaConnexion = New ADODB.Connection
MaConnexion.Open "..." ' remplace les ... par la chaîne de connexion appropriée
...
End Sub

Lorsque tu veux remplir ton combobox, tu crées alors ton recordset comme dans le code de ton premier message, en mettant pour ta commande
.ActiveConnection = MaConnexion

2. Utilisation de DataEnvironnment
En utilisant un concepteur DataEnvironnement, tu peux créer une connexion, puis créer une commande pour cette connexion que tu lies à ta procédure stockée.
En utilisant des datacombo, tu auras la possiblité de les lier à la connexion et à la commande du dataenvironnment créé, et tu ne devras alors pas remplir ton combo par une boucle.

Cela te convient-il?

Pierre Fauconnier
3
Pierre_faucon Messages postés 96 Date d'inscription jeudi 10 juin 2004 Statut Membre Dernière intervention 22 mai 2007
21 févr. 2005 à 12:14
Bonjour

En plus de déclarer ta connection, tu dois l'ouvrir avec une ligne du genre
Cls_Db_Me.Connexion.Open ChaîneDeConnexion

Cherche dans cls_db_me si tu trouves cette ligne ( chaineDeConnexion est une variable, tu dois donc cherche cls_db_me_connexion.open ) et recopie cette ligne avant la ligne
Cmd_PSSql.ActiveConnection = Cls_Db_Me.Connexion

A toi d'adapter pour que ta connexion soit ouverte avant d'y faire référence lors de l'utilisation d'une commande.

Ok?

Pierre Fauconnier
0
sabou94 Messages postés 158 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 17 avril 2007
21 févr. 2005 à 14:24
merci mais ca n'a pas resout mon probleme! ca me met une autre erreur maintenant :
Cls_Db_Me.Connexion = Cls_Db_Me.OpenDb
"cet argument n'est pas facultatif"
j'ai mis ca car le connexion.open n'exite pas.... est il possible que l'erreur vienne du fait que la connexion soit mal fermée dans la feuille precedente?
merci.
sabrina
0
sabou94 Messages postés 158 Date d'inscription vendredi 12 mars 2004 Statut Membre Dernière intervention 17 avril 2007
22 févr. 2005 à 09:35
Ok merci j'ai compris, ca marche nickel maintenant!
MERCI!
sabrina
0
Rejoignez-nous