Remplir un ComboBox avec une requête SQL ?

Remplir un ComboBox avec une requête SQL ? - VB/VBA/VBS - Programmation

Marsh Posté le 15-02-2003 à 15:02:56    

Remplir un ComboBox avec une requête SQL :??: Comment faire :??:
ma Combo s'appelle Combo6 et contient des nombres
j'ai fais Combo6.Text = " SELECT numcli FROM client mais marche po :(


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 15:02:56   

Reply

Marsh Posté le 15-02-2003 à 15:15:03    

euh, c'est pas aussi simple hein !  :heink:  
 
il te faut une source de données, créer un recordset à partir de ta requete et utiliser les entrées de ce recordset pour remplir ton combo !


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-02-2003 à 15:29:38    

Harkonnen a écrit :

euh, c'est pas aussi simple hein !  :heink:  
 
il te faut une source de données, créer un recordset à partir de ta requete et utiliser les entrées de ce recordset pour remplir ton combo !


j'ai essayé ça mais ça marchrche pas
sql11 = "SELECT numclid FROM client "
Set Rs11 = DB.OpenRecordset(sql11, dbOpenDynaset)
Combo6.Text = sql11


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 15:31:55    

[:daplopbot]

Reply

Marsh Posté le 15-02-2003 à 15:38:54    


merci pour ton aide  :hello:


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 15:43:37    

albator7k a écrit :


merci pour ton aide  :hello:  


 
nan mais la tu m'excuseras mais c trop trop hallucinant :ouch:

Reply

Marsh Posté le 15-02-2003 à 15:45:08    


Dim iCount, iRecCount as Integer
Dim RecTmp as Recordset
Dim SQL as String
 
SQL="SELECT MonChamp FROM MaTable"
Set RecTmp = MyDatabase.OpenRecordset(SQL)
 
RecTmp.MoveLast
iRecCount=RecTmp.RecordCount
RecTmp.MoveFirst
 
For iCount=1 to iRecCount
   cboBox.AddItem RecTmp!MonChamp
   RecTmp.MoveNext
Next
 
RecTmp.Close
Set RecTmp = Nothing


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-02-2003 à 15:45:25    

bah que vas tu faire dans les topics vb aussi...

Reply

Marsh Posté le 15-02-2003 à 15:46:58    

lorill a écrit :

bah que vas tu faire dans les topics vb aussi...


 
j'passais par la [:spamafote]

Reply

Marsh Posté le 15-02-2003 à 16:24:09    

Harkonnen a écrit :


Dim iCount, iRecCount as Integer
Dim RecTmp as Recordset
Dim SQL as String
 
SQL="SELECT MonChamp FROM MaTable"
Set RecTmp = MyDatabase.OpenRecordset(SQL)
 
RecTmp.MoveLast
iRecCount=RecTmp.RecordCount
RecTmp.MoveFirst
 
For iCount=1 to iRecCount
   cboBox.AddItem RecTmp!MonChamp
   RecTmp.MoveNext
Next
 
RecTmp.Close
Set RecTmp = Nothing




ok je fou ça dans le private sub combo1_change
avec ma table client de la base entreprise.mdb ça doit donner
 

Code :
  1. Dim iCount, iRecCount as Integer
  2. Dim RecTmp as Recordset
  3. Dim SQL as String
  4. SQL="SELECT numclient FROM client"
  5. Set RecTmp = entreprise.OpenRecordset(SQL)
  6. RecTmp.MoveLast
  7. iRecCount=RecTmp.RecordCount
  8. RecTmp.MoveFirst
  9. For iCount=1 to iRecCount
  10.    cboBox.AddItem RecTmp!numclient
  11.    RecTmp.MoveNext
  12. Next
  13. RecTmp.Close
  14. Set RecTmp = Nothing


marche po  :(


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 16:24:09   

Reply

Marsh Posté le 15-02-2003 à 16:32:59    

C'est pas dans le combo1_Change qu'il faut le mettre, mais dans le Form_Load.
 
Et bien évidemment, il faut remplacer  
 


cboBox.AddItem RecTmp!numclient  


 
en tenant compte du nom de ton combo... :sarcastic:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-02-2003 à 16:48:21    

Harkonnen a écrit :

C'est pas dans le combo1_Change qu'il faut le mettre, mais dans le Form_Load.
 
Et bien évidemment, il faut remplacer  
 


cboBox.AddItem RecTmp!numclient  


 
en tenant compte du nom de ton combo... :sarcastic:


j'ai copié/collé trop vite je l'avais corrigé entre temps mais résultat idem  :(


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 16:56:42    

ton objet "entreprise", c'est quoi ? un objet database ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-02-2003 à 17:03:48    

Harkonnen a écrit :

ton objet "entreprise", c'est quoi ? un objet database ?


ma base s'appelle entreprise.mdb du Access 2000 entreprise est aussi le nom de la table qui contient ente autre le champ numclient,adresclient, .....
 
je l'ouvre avec ça
Private Sub Form_Load()
 Set DB = OpenDatabase(App.Path & "\entreprise.mdb" )
End Sub
 
dans les déclaratiosn de variables j'ai DB As Database
 
je bloque sur ce  :fou: de combo box c'est con mais c'est comme ça et j'arrive pas à faire focntionner la solution qu'on m'a donné :/
 
j'ai remodifié
'déclarations des variable'
Dim iCount, iRecCount as Integer  
Dim RecTmp as Recordset  
Dim SQL as String  
___________________________________________________________
 
SQL="SELECT numclient FROM entreprise"  
Set RecTmp = DB.OpenRecordset(SQL)  
 
RecTmp.MoveLast  
iRecCount=RecTmp.RecordCount  
RecTmp.MoveFirst  
 
For iCount=1 to iRecCount  
  Combo6.AddItem RecTmp!numclient  
  RecTmp.MoveNext  
Next  
 
RecTmp.Close  
Set RecTmp = Nothing  
 
sans succès
 
VB bloque la Set RecTmp = DB.OpenRecordset(SQL) il trouve pas la table


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 17:10:23    

as tu une table entreprise dans ta base ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-02-2003 à 17:30:37    

Harkonnen a écrit :

as tu une table entreprise dans ta base ?


cf ma réponse
la base et la table ont le même nom


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 17:38:15    

juste une question : le code que je t'ai filé, tu le met bien dans Form_Load() ???


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-02-2003 à 17:42:43    

Harkonnen a écrit :

juste une question : le code que je t'ai filé, tu le met bien dans Form_Load() ???


ouai comme tu me l'as dis


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 17:46:18    

je vois qu'une solution je vais réécrire tout mon programme enfin juste un morceau pour voir où ça merde.


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 15-02-2003 à 18:04:10    

pour ceux que ça dis de tester VB6SP5 obligatoire
 
http://albator7k.free.fr/combo.rar


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 16-02-2003 à 14:17:49    

Ptite remarque pour Harko (:D)
 
Dans ton sample, iCount est déclaré variant car en VB, il faut toujours spécifier un type à côté de chaque variable (contrairement à la plupart sinon tous les autres langages)
 
albator7k, tu dois ajouter via le menu Projet/Références "Microsoft Data Access Objects 3.6" (DAO 3.6) et ton problème sera résolu.  Ceci pour avoir à ta disposition le support des classes inhérentes à Access.
 
Cela dit je me suis aperçu qu'Access 2000 faisait usage par défaut de ADO et non DAO.  Là c'est toi qui voit.  DAO va tomber dans l'oubli du support MS au profit de ADO (Access Data Objects).  Le code devra alors être légèrement modifié mais rien d'insurmontable ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-02-2003 à 14:25:17    

drasche a écrit :

Ptite remarque pour Harko (:D)
 
Dans ton sample, iCount est déclaré variant car en VB, il faut toujours spécifier un type à côté de chaque variable (contrairement à la plupart sinon tous les autres langages)
 
albator7k, tu dois ajouter via le menu Projet/Références "Microsoft Data Access Objects 3.6" (DAO 3.6) et ton problème sera résolu.  Ceci pour avoir à ta disposition le support des classes inhérentes à Access.
 
Cela dit je me suis aperçu qu'Access 2000 faisait usage par défaut de ADO et non DAO.  Là c'est toi qui voit.  DAO va tomber dans l'oubli du support MS au profit de ADO (Access Data Objects).  Le code devra alors être légèrement modifié mais rien d'insurmontable ;)


oki merci du conseil  :hello:


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 16-02-2003 à 15:13:03    

drasche -> t'aurais pas un exemple de connexion a une base du  
style

Code :
  1. Option explicit
  2. Dim cnnADO As New ADODB.Connection  ' Pour la connection à la base de données
  3. Dim cmdADO As New ADODB.Command     ' Pour la commande à la base de données
  4. Dim rsADO As New ADODB.Recordset    ' Pour recevoir le résultat de la commande
  5. Private Sub Form_Load()
  6. ' Choix du fournisseur de la Base de Données - pour Access - Microsoft jet OLEDB
  7. cnnADO.Provider = "Microsoft.jet.OLEDB.4.0"
  8. ' Chemin de la Base de Données - ici le répertoire de l'application
  9. cnnADO.ConnectionString = App.Path & "\Biblio.mdb"
  10. ' Ouverture de la Base de Données
  11. cnnADO.Open
  12. ' Pour relier la connexion ouverte à la commande
  13. cmdADO.ActiveConnection = cnnADO


exemple pris dans un bouquin MA mais j'y comprend pas tout
 
jusqu'à présent j'utilise cette méthode mais c'est une usine à gaz qui merde avec plusieurs tables :/
 
J'ai trouvé pas mal d'exemple
http://www.planet-source-code.com/ [...] owCode.htm
http://www.experts-exchange.com/Pr [...] 83655.html
mais chui un peu paumé là :/
je vois pleins de source avec ADODB.Connection  et j'arrive pas à en faire tourner un seul quand j'en fais un à ma sauce :/ sauf
avec ça mais j'en ai atteinds les limites  :(


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 16-02-2003 à 15:40:53    


Option Explicit
 
Dim recTmp As Recordset
Dim cnn As Connection
Dim strSQL As String
 
 
Private Sub Form_Load()
    Set cnn = New Connection
 
    ' Définition de la connexion
    cnn.Provider = "Microsoft.jet.OLEDB.4.0"
    ' Ouverture
    cnn.Open App.Path & "\entreprise.mdb "
 
    ' Définition de la source
    strSQL = "SELECT nomclient FROM CLIENT"
 
    ' Ouverture de la source
    Set recTmp = New Recordset
    recTmp.Open strSQL, cnn
 
    ' Lecture de la source jusqu'à la fin
    Do While Not recTmp.EOF
        Combo1.AddItem recTmp!nomclient
        recTmp.MoveNext
    Loop
 
    recTmp.Close
    Set recTmp = Nothing
End Sub


 
Voilà, j'ai modifié le code de Harko en utilisant ADO (Références> "Microsoft ActiveX Database Objects 2.5" ) au lieu de DAO.
 
La connexion sur une DB Access est toute simple dans ce type de cas.  Je te conseille de regarder l'aide sur la méthode Open de Recordset, en particulier les types de curseurs.  La lecture du nombre d'enregistrements n'était pas nécessaire ici (il aurait retourné -1 dans cette configuration).


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-02-2003 à 15:59:26    

drasche a écrit :


Option Explicit
 
Dim recTmp As Recordset
Dim cnn As Connection
Dim strSQL As String
 
 
Private Sub Form_Load()
    Set cnn = New Connection
 
    ' Définition de la connexion
    cnn.Provider = "Microsoft.jet.OLEDB.4.0"
    ' Ouverture
    cnn.Open App.Path & "\entreprise.mdb "
 
    ' Définition de la source
    strSQL = "SELECT nomclient FROM CLIENT"
 
    ' Ouverture de la source
    Set recTmp = New Recordset
    recTmp.Open strSQL, cnn
 
    ' Lecture de la source jusqu'à la fin
    Do While Not recTmp.EOF
        Combo1.AddItem recTmp!nomclient
        recTmp.MoveNext
    Loop
 
    recTmp.Close
    Set recTmp = Nothing
End Sub


 
Voilà, j'ai modifié le code de Harko en utilisant ADO (Références> "Microsoft ActiveX Database Objects 2.5" ) au lieu de DAO.
 
La connexion sur une DB Access est toute simple dans ce type de cas.  Je te conseille de regarder l'aide sur la méthode Open de Recordset, en particulier les types de curseurs.  La lecture du nombre d'enregistrements n'était pas nécessaire ici (il aurait retourné -1 dans cette configuration).


c'est excellent tout ça  :)  
pour pouvoir enregistrer ce qe je sais dans le combo
je fou Private Sub Command1_Click()
Rs.Fields("nomclient" ) = Combo1.Text
End Sub
avec Rs As ADODB.Recorset
c'est la méthode DAO ça je suppose :??:


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 16-02-2003 à 16:01:21    

le même code doit fonctionner en ADO.  N'oublie pas ce qu'il faut pour ajouter le record hein ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-02-2003 à 16:24:30    

drasche a écrit :

le même code doit fonctionner en ADO.  N'oublie pas ce qu'il faut pour ajouter le record hein ;)


pour ajouter le record, ben en ce moment j'en oublies des choses surtout que je suis loin de le maitriser VB :/
je vois tellement de solutions que je me mélange enfin pour le lister dans un combo ça devient plus clair déjà  :)  
le même code il fonctionne pas j'ai oublié de cocher une case dans préférencees :??:  
 http://albator7k.free.fr/combo.rar


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 16-02-2003 à 16:33:58    

albator7k a écrit :


le même code il fonctionne pas j'ai oublié de cocher une case dans préférencees :??:  


ton ancien code utilisait DAO. Normal [:spamafote]
 
Tu dois toujours passer par Références si tu veux ajouter de nouvelles classes et possibilités à ton programme.  Par exemple, Database est une classe qui émane de DAO.  Connection vient de ADO.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-02-2003 à 16:39:37    

drasche a écrit :


ton ancien code utilisait DAO. Normal [:spamafote]
 
Tu dois toujours passer par Références si tu veux ajouter de nouvelles classes et possibilités à ton programme.  Par exemple, Database est une classe qui émane de DAO.  Connection vient de ADO.


ok je raye database de ma mémoire, je mets quoi à la place :??:
RSADO As Recordset errro var non définie  :heink:


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 16-02-2003 à 21:26:14    

je remplace Rs.Fields'"mon champ" ) = Combo6.Text par exemple par
Open.Recordsource.Addnew = Combo6.Text :??:


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 16-02-2003 à 21:36:21    

albator > ok, tu débutes ! mais avant que je ne t'envoie chez les sylphidres, file donc sur http://www.vbfrance.com ou tu trouveras plein de codes sources d'exemple pour tout un tas de trucs, dont les bases de données.
 
à ce niveau, c'est plus être débutant,  mais carrément flemmard !! :fou:

Reply

Marsh Posté le 16-02-2003 à 21:40:54    

harko: Sylvidres ça s'écrit :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-02-2003 à 21:42:36    

:hello:  
 
Comme apparemment tout le monde te lache, permet moi de te venir en aide.
 
Ce lien te permettra de tout savoir sur l'accés aux bases de données en VB :
 
http://www.allvbdatabase.com/french/ado/
 
En espérant t'avoir aidé :)

Reply

Marsh Posté le 16-02-2003 à 21:43:47    

drasche a écrit :

harko: Sylvidres ça s'écrit :D


ah oui, mince, je confonds avec Sylphide, le beurre pour régime amincissant [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-02-2003 à 21:49:31    

Harkonnen a écrit :


ah oui, mince, je confonds avec Sylphide, le beurre pour régime amincissant [:ddr555]


LOL


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 16-02-2003 à 23:05:21    

Harkonnen a écrit :

albator > ok, tu débutes ! mais avant que je ne t'envoie chez les sylphidres, file donc sur http://www.vbfrance.com ou tu trouveras plein de codes sources d'exemple pour tout un tas de trucs, dont les bases de données.
 
à ce niveau, c'est plus être débutant,  mais carrément flemmard !! :fou:


merci vbfrance je connais j'ai trouvé plein de sources et ce bien avant que tu me le dises seulement l'interface est jolie mais quand je creuse et que je regarde comment le mec a fait sa base [:vomi] en fait une table ou il mélange les torchons et les serviettes :/ certains sources était intéressant mais le mec avait oublié de coller la base alors forcément ça aide pas pour comprendre, le code que tu m'as donné je l'ai cherché sur  vbfrance je l'ai pas trouvé, j'ai même chopé le VBCS2.zip sans y trouver mon bonheur :( y a ue seul source qui m'intéressait mais le mec a tout fais avec les contrôles data :/ et je suis pas flemmard :fou: en fait ça me rend pas fou ça m'indiffère ce genre de propos gratuit :hello:
 
Serial Coder-> http://www.allvbdatabase.com/french/ado/ mets au moins un lien intelligent :sarcastic:


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 17-02-2003 à 08:58:55    

albator7k a écrit :


Serial Coder-> mets au moins un lien intelligent :sarcastic:


la je crois que tu lui en demandes trop ! :d


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-03-2003 à 20:12:37    

merci à tout ceux qui m'ont aidé  :jap:  
j'aurais une autre ptite question, je veux rafraichir en temps réel le combobox, jusqu'à présent la seule solution était de fermer puis réouvrir le problème pour que la requête sSQL fasse son travail. Y aurai-t-il un moyen de faire tourner la requête pas en permanence mais disons toute les 5 secondes :??:
 :hello:


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 03-03-2003 à 21:38:41    

mettre un timer est-il judicieux, je vais vite avoir plusieurs centaines d'enregistrement voir milliers si la ou plutôt les requêtes tourent en quasi permanence ça va bouffer des ressource CPU :/ mettre un bouton rafraichissement pourquoi pas, mais l'utilisateur veut que tout se fasse de façon automatique :/


---------------
L'expérience est une lanterne que l'on a accrochée dans le dos et qui n'éclaire que le chemin parcouru [:albator7k]
Reply

Marsh Posté le 04-03-2003 à 09:13:48    

Il y a des moments où il faut raisonner l'utilisateur.  Si une telle méthode existait, elle pomperait vite les ressources du serveur.  La seule manière est effectivement de mettre un timer, lequel déclenchera la requête adéquate.  En tout cas, essayer de synthétiser une info qui indique que la table a changé, plutôt que ramener la table ou extrait de la table, histoire d'économiser le volume de données échangé.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed