Remplir un ComboBox avec une requête SQL ? - VB/VBA/VBS - Programmation
Marsh Posté le 15-02-2003 à 15:15:03
euh, c'est pas aussi simple hein !
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 !
Marsh Posté le 15-02-2003 à 15:29:38
Harkonnen a écrit : euh, c'est pas aussi simple hein ! |
j'ai essayé ça mais ça marchrche pas
sql11 = "SELECT numclid FROM client "
Set Rs11 = DB.OpenRecordset(sql11, dbOpenDynaset)
Combo6.Text = sql11
Marsh Posté le 15-02-2003 à 15:38:54
merci pour ton aide
Marsh Posté le 15-02-2003 à 15:43:37
ReplyMarsh Posté le 15-02-2003 à 15:45:08
|
Marsh Posté le 15-02-2003 à 15:45:25
ReplyMarsh Posté le 15-02-2003 à 15:46:58
ReplyMarsh Posté le 15-02-2003 à 16:24:09
Harkonnen a écrit :
|
ok je fou ça dans le private sub combo1_change
avec ma table client de la base entreprise.mdb ça doit donner
Code :
|
marche po
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
|
en tenant compte du nom de ton combo...
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.
|
j'ai copié/collé trop vite je l'avais corrigé entre temps mais résultat idem
Marsh Posté le 15-02-2003 à 16:56:42
ton objet "entreprise", c'est quoi ? un objet database ?
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 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
Marsh Posté le 15-02-2003 à 17:10:23
as tu une table entreprise dans ta base ?
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
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() ???
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
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.
Marsh Posté le 15-02-2003 à 18:04:10
pour ceux que ça dis de tester VB6SP5 obligatoire
http://albator7k.free.fr/combo.rar
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
Marsh Posté le 16-02-2003 à 14:25:17
drasche a écrit : Ptite remarque pour Harko (:D) |
oki merci du conseil
Marsh Posté le 16-02-2003 à 15:13:03
drasche -> t'aurais pas un exemple de connexion a une base du
style
Code :
|
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
Marsh Posté le 16-02-2003 à 15:40:53
|
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).
Marsh Posté le 16-02-2003 à 15:59:26
drasche a écrit :
|
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
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
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
Marsh Posté le 16-02-2003 à 16:33:58
albator7k a écrit : |
ton ancien code utilisait DAO. Normal
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.
Marsh Posté le 16-02-2003 à 16:39:37
drasche a écrit : |
ok je raye database de ma mémoire, je mets quoi à la place
RSADO As Recordset errro var non définie
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
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 !!
Marsh Posté le 16-02-2003 à 21:40:54
harko: Sylvidres ça s'écrit
Marsh Posté le 16-02-2003 à 21:42:36
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é
Marsh Posté le 16-02-2003 à 21:43:47
drasche a écrit : harko: Sylvidres ça s'écrit |
ah oui, mince, je confonds avec Sylphide, le beurre pour régime amincissant
Marsh Posté le 16-02-2003 à 21:49:31
Harkonnen a écrit : |
LOL
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. |
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 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 en fait ça me rend pas fou ça m'indiffère ce genre de propos gratuit
Serial Coder-> http://www.allvbdatabase.com/french/ado/ mets au moins un lien intelligent
Marsh Posté le 17-02-2003 à 08:58:55
albator7k a écrit : |
la je crois que tu lui en demandes trop !
Marsh Posté le 03-03-2003 à 20:12:37
merci à tout ceux qui m'ont aidé
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
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
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é.
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]