Remplir une liste déroulante à partir d'une requete SELECT

alexbigfoug Messages postés 31 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 25 mai 2011 - 24 mai 2011 à 15:47
DevLama Messages postés 356 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 18 novembre 2021 - 4 nov. 2011 à 14:24
Bonjour tous le monde !!


Voilà mon problème (même mes problèmes).

Je souhaite récupérer plusieurs lignes d'une table (maximum 5 colonnes), et les afficher dans une liste déroulante.

Voici le code :

Dim compteur As String

compteur = 0

'Récupération des enregistrements dans la combobox
Conn = New SqlConnection(chaine_connexion)
Conn.Open()
requete_sql = New SqlCommand("SELECT * FROM " & CB_choix_table.SelectedItem & ";", Conn)
myReader = requete_sql.ExecuteReader
CB_choix_table.Items.Clear()
Do While myReader.Read()
CB_choix_table.Items.Add(myReader.GetString(compteur))
compteur = compteur + 1
Loop
myReader.Close()
Conn.Close()



1ere problème, je rencontre ce message :

Impossible d'effectuer un cast d'un objet de type 'System.DateTime' en type 'System.String'.

(ligne en gras dans le code)

Il s'avère que l'une des colonnes de la table est une date...

Voilà j'espère que vous allez pouvoir m'aider^^

Merci d'avance!!

11 réponses

4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
24 mai 2011 à 15:57
Teste

CB_choix_table.Items.Add(cstr(myReader.GetString(compteur)))

P.S. Es-tu sur que compteur peut commencer à 0 ? Il me semble (pas sur) qu'il doit partir de 1.
0
alexbigfoug Messages postés 31 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 25 mai 2011
24 mai 2011 à 16:03
Déjà essayer la conversion à ce niveaux là, et aucun effet (toujours le même message).

En ce qui concerne le compteur j'ai également un doute... Mais il me semble que sur visual basic il part de 0.

Merci de votre aide !
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
24 mai 2011 à 16:16
Les DB parte de 1 donc compteur doit valoir 1

si avant CB_choix_table.Items.Add(myReader.GetString(compteur)) tu met

msgbox myReader.GetString(1)

A tu une valeur correcte a l'affichage ?
0
alexbigfoug Messages postés 31 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 25 mai 2011
24 mai 2011 à 16:30
msgbox myReader.GetString(0) affiche les éléments de ma première colonne
msgbox myReader.GetString(1) affiche les éléments de ma deuxième colonne
0

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

Posez votre question
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
24 mai 2011 à 16:45
G trouver tu va mourir de rire
Tu as mis "Dim compteur As String "
Tu as défini compteur comme un string !!!!

Donc Dim compteur As byte et c tout bon
0
alexbigfoug Messages postés 31 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 25 mai 2011
24 mai 2011 à 17:00
Oui il y a de ça^^
Mais le problème ne vient pas de là en faite....

Je sais pas ou j'avais la tête quand j'ai codé...

Ce qu'il me faut en réalité est quelques chose de ce genre

CB_choix_table.Items.Add(myReader.GetValue(0) & " | " & myReader.GetValue(1)............)

je souhaite faire une ligne entière avec toutes les colonnes.

Cepedant, en fonction de la table j'ai un nombre de colonne différent...

Et bien sûr, si dans une table je n'ai qu'une seul colonne, cela signifie que myReader.GetValue(1) ne peut pas être remplie et j'obtiens une erreur...
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
24 mai 2011 à 17:15
Ok ! Je vois tout es plus claire !!!

Je te propose de modifier ton code de la façon suivante

Dim compteur As byte ' va de 0 à 255 champs
dim StringFinal as string


'Récupération des enregistrements dans la combobox
Conn = New SqlConnection(chaine_connexion)
Conn.Open()
requete_sql = New SqlCommand("SELECT * FROM " & CB_choix_table.SelectedItem & ";", Conn)
myReader = requete_sql.ExecuteReader
CB_choix_table.Items.Clear()
Do While myReader.Read()
   compteur = 0
   do While compteur < myReader.Fields.Count 'Vérifie cette ligne suis pas sur sur le but et de connaitre le nb de champs
     StringFinal  = StringFinal & myReader.GetString(compteur) & "|"
     compteur = compteur + 1
   loop
   CB_choix_table.Items.Add(StringFinal )
   StringFinal  = ""
   myReader.next 'Là aussi suis pas sur sur
Loop
myReader.Close()
Conn.Close()


regarde met deux trois commentaire mais l'idée et la bonne il faut juste que tu l'adapte.
Redis moi
0
alexbigfoug Messages postés 31 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 25 mai 2011
24 mai 2011 à 18:03
Je te remercie beaucoup 4u4me4us.

Je testerai ça dès demain et je vous tiendrai au courant !!

Encore merci!
0
alexbigfoug Messages postés 31 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 25 mai 2011
25 mai 2011 à 13:44
Je viens de tester, et effectivement ce dont tu n'étais pas sûr ne fonctionne pas.

myReader.Fields.Count --> ne fonctionne pas
myReader.next --> ne fonctionne pas
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 13:58
Sute !!!! Conn et requete_sql sont de qu'elle type ?
0
DevLama Messages postés 356 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 18 novembre 2021 10
4 nov. 2011 à 14:24
Beurk Pour quoi Tant des lignes abusives?
Bon voici la methode la plcus facile:
v
dim i as Integer
   Rec.Movefirst
Do while Rec.EOF=False 
Combo.List(i)=Rec!NOM
i=i+1
Rec.MoveFirst
Loop

Hornel Lama
0
Rejoignez-nous