Comboxbox Databounded

Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 17 mars 2012 à 12:08
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 - 17 mars 2012 à 14:48
Bonjour,

J'aimerais savoir si le contrôle ComboBox livré en natif avec VB6 peut être lié à un Recordset ?

Tout simplement parce que ComboBox.Datafield = Recordset.Fields(0).Name échoue ainsi qu'avec ComboBox.DataMember.
"Erreur d'exécution '545'"
"Impossible de lier au champ ou au DataMember/DataField"
Le champ existe bien et n'est pas nul, j'ai vérifié.
Le même code avec un DataCombo marche très bien.

Petite précision le recordset est déconnecté (et ne peut pas être autrement car créé et rempli par code). Je précise que je n'utilise pas de DataEnvironment ou autre contrôle ADO inutiles, simplement la référence à msado15.dll (Microsoft ActiveX Data Objects 2.8 Library).

Question subsidiaire, si je remplace un simple ComboBox par un DataComBo, je n'ai pas de problèmes pour l'affichage de mon champ, par contre je ne peux plus modifier le nombre de lignes affichées par API, la fonction GetWindowLong() revoyant 0 sur le DataComboBox et une valeur utilisable avec le ComboBox.

Merci d'avance pour vos lumières.

Calade

9 réponses

Utilisateur anonyme
17 mars 2012 à 12:46
Bonjour,
Oui, ça devrait ressembler à ça:
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Set db = New ADODB.Connection
Set rs = New ADODB.Recordset

db.Open "Provider =Microsoft.Jet.OLEDB.4.0;Data Source=c:\project\emp.mdb;"

rs.Open "select * from emp", db, adOpenStatic, adLockOptimistic

Set Combo1.DataSource = rs
Combo1.DataField = "name"
'name et emp à remplacer par le nom de ta table et base de données


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
17 mars 2012 à 13:37
Salut acive et merci de ta réponse,

C'est exactement ça à part qu'il s'agit d'un recordset déconnecté sur un modèle SQL.

Le même code fonctionne sur un Datacombo et non sur un ComboBox classique avec une erreur 545.
Aurais-tu un début de réponse ?


Calade
0
Utilisateur anonyme
17 mars 2012 à 13:44
C'est le résultat de la requête qui va être associé au combo.
Que ce soit en access ou SQL, c'est la même chose (de toute manière c'est une requête SQL).

Par contre :
il s'agit d'un recordset déconnecté sur un modèle SQL
s'il n'est pas connecté ça pose problème.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
17 mars 2012 à 13:51
s'il n'est pas connecté ça pose problème.


Pourquoi cela poserait-il problème ?
Le contrôle ComboBox simple (et natif) serait-il différent du DataCombo ?

Et il est déconnecté tout simplement parce qu'il est rempli par code et ne s'appuie sur aucune base de données.
Quant à utiliser un tableau (propriété List), je crois qu'il vaut mieux oublier, je ne suis qu'en période d'essai et mon recordset contient plus de 3700 enregistrements !
De toutes façons à mon avis un tableau est beaucoup trop lourd pour se balader dedans comme avec un recordset.

Calade
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
17 mars 2012 à 14:12
J'ai fait quelques essais complémentaires.

Dans le même contexte j'ai simplement essayé avec un recordset connecté à sa BD, la propriété Datafield achoppe toujours.
Son type étant adVarChar, je l'ai remplacé par adChar (donc en longueur fixe).
J'ai aussi essayé en changeant sa longueur (originellement 255, je l'ai réduit à 50 pour mes essais.

Rien à faire.

D'autres idées ?


Calade
0
Utilisateur anonyme
17 mars 2012 à 14:23
Attends,
il est rempli par code et ne s'appuie sur aucune base de données


Tu ne peux donc pas lui attribuer le datasource.

As-tu fait une recherche sur le site? avec "codes sauf .net" j'ai vu justement quelques exemples.

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
17 mars 2012 à 14:27
Tu ne peux donc pas lui attribuer le datasource.


Le Datasource a déjà été affecté, avant le DataField.
De toutes façons, connecté ou non, cela ne marche pas (cf mon dernier message).
Calade
0
Utilisateur anonyme
17 mars 2012 à 14:33
Expose ton code, (je n'ai pas de base SQL)


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
17 mars 2012 à 14:48
  
   Set DataSource as New ADODB.Recordset                        
   Set p_oFiles = New BH_CScanDrives 'DLL Perso'	
   DataSource.Fields.Append "FILE_NAME", adVarChar, MAX_PATH
   DataField = "FILE_NAME"
   DataSource.Open   
   With p_TManager.TFOLDER
      Do While "C:\Mes Photos\Vacances*.JPG" 'C'est évidemment un exemple, les valeurs réelles étant contenues dans d'autres propriétés.
         DataSource.AddNew
         DataSource.Fields("FILE_NAME").Value = p_oFiles.FileName
         DataSource.Update
      Loop
   End With
      CFiles.Visible = True:                                        CFiles.SetFocus
      Set CFiles.DataSource DataSource:                           CFiles.DataField DataField

La routine fait appel à un composant perso' d'itération dans un dossier donné de manière à récupérer les fichiers répondant à certains critères (par Exemple: "C:\Mes Photos\Vacances*.JPG") (c'est la valeur de départ du Do While)
p_oFiles.FileName renvoie donc le nom du fichier SANS le dossier qui serait redondant.

Le projet est en fait un OCX d'affichage de vignettes et Datasource une propriété contenant un recordset (connecté ou non cela dépend d'autres propriétés).
DataField contient le nom du champ (forcé à FILE_NAME ici)
CFiles est le combobox posant problème.

Evidemment j'ai un peu élagué le code pour ne pas t'ensevelir sous des pages de code.

Calade
0
Rejoignez-nous