marmo31
Messages postés14Date d'inscriptionsamedi 29 décembre 2007StatutMembreDernière intervention27 février 2008
-
20 févr. 2008 à 14:49
marmo31
Messages postés14Date d'inscriptionsamedi 29 décembre 2007StatutMembreDernière intervention27 février 2008
-
27 févr. 2008 à 13:03
Bonjour à tous,
Tout d'abord je tiens à préciser que je suis débutant en vb, alors mon problème va peut être vous semblait bête...
Avant d'exposer ce problème, je précise que je travaille sous visual studio 2005, et j'utilise une base de donnée sous Access.
Alors mon probleme est tout simple, je veux récupérer les donnée d'une table ayant pour condition le texte sélectionné dans ma listbox.
Ma requête est donc la suivante :
choix = ListBox1.Text
sql = "select * from Personne where Nom='" & choix & "';"
Il me semble que cela est correct vu que si je fais un messagebox.show(choix) il m'affiche bien le texte qui a été choisi dans la listbox.
Je précise que l'erreur que j'obtiens est : "La conversion du type 'DBNull' en type 'String' n'est pas valide. Mais ma requête ne retourne pas une valeur nulle."
Enfin je débute et je n'ai certainement pas encore tout compris. Je précise que cette instruction est placé sur l'évenement clic dans la listbox. Je vous joins, le code sur cet évenement. Merci de me porter votre aide. :)
Voici le code :
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.Click
Dim choi As String
choi = ListBox1.Text cnxstr "provider microsoft.jet.oledb.4.0 ; data source = " & Application.StartupPath & "\Agenda.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = cnxstr
cnx.Open()
'Création de la requête sql
sql = "select * FROM Personne where Nom='" & choi & "';"
'Création de la commande et on l'instancie (sql)
cmd = New OleDbCommand(sql)
'Création du data-adapter (dta) et on l'instancie (cmd)
dta = New OleDbDataAdapter(cmd)
'On instancie la commande (cmd) à la connection (cnx)
cmd.Connection() = cnx
'On charge le dataset (dts) grace à la propriété fill du data-adapter (dta)
dta.Fill(dts, "Personne")
'On charge la datatable (dtt) grace à la propriété tables du dataset (dts)
dtt = dts.Tables("Personne")
Me.TextBox1.Text = dtt.Rows(0).Item("Nom")
Me.TextBox2.Text = dtt.Rows(0).Item("Prenom")
Me.TextBox3.Text = dtt.Rows(0).Item("DateNaissance")
End Sub
Merci de m'avoir porté un peu d'attention
PS : Veuillez m'excuser si un poste de ce type existe déjâ je n'ai pas été fichu de le trouver
marmo31
Messages postés14Date d'inscriptionsamedi 29 décembre 2007StatutMembreDernière intervention27 février 2008 27 févr. 2008 à 13:03
Problème résolu en appliquant une autre méthode.
Chargement du formulaire :
Private Sub Modif_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " _
& Application.StartupPath & "\Agenda.mdb;"
'Initialisation de la chaîne contenant l'instruction SQL
strSql = "SELECT Personne.* FROM Personne"
'Instanciation d'un Objet Connexion
ObjetConnection = New OleDbConnection
'Donner à la propriété ConnectionString les paramètres de connexion
ObjetConnection.ConnectionString = strConn
'Ouvrir la connexion
ObjetConnection.Open()
'Instancier un objet Commande
ObjetCommand = New OleDbCommand(strSql)
'Instancier un objet Adapter
ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
'initialiser l'objet Command
ObjetCommand.Connection() = ObjetConnection
'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
ObjetDataAdapter.Fill(ObjetDataSet, "Personne")
'Mettre dans un Objet DataTable une table du DataSet
ObjetDataTable = ObjetDataSet.Tables("Personne")
If rownum > ObjetDataTable.Rows.Count - 1 Then
MessageBox.Show("Aucune personne présente.")
personne.Show()
Me.Close()
Exit Sub
End If
'Indiquer au ListBox d'afficher la table "fichepatient" (indiquer _
la source)
ListBox1.DisplayMember = "NOM"
ListBox1.DataSource = ObjetDataSet.Tables("Personne")
End sub
Listbox
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal _
e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
TextBox1.Enabled = True
TextBox2.Enabled = True
Me.MaskedTextBox1.Enabled = True
Dim o As New Object
ListBox1.ValueMember = "NOM"
ListBox1.DataSource = ObjetDataSet.Tables("Personne")
If ListBox1.SelectedIndex <> -1 Then
TextBox1.Text = CType(ListBox1.SelectedValue, String)
End If
ListBox1.ValueMember = "PRENOM"
ListBox1.DataSource = ObjetDataSet.Tables("Personne")
If ListBox1.SelectedIndex <> -1 Then
TextBox2.Text = CType(ListBox1.SelectedValue, String)
End If
ListBox1.ValueMember = "DATENAISSANCE"
ListBox1.DataSource = ObjetDataSet.Tables("Personne")
If ListBox1.SelectedIndex <> -1 Then
MaskedTextBox1.Text = CType(ListBox1.SelectedValue, String)
End If
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 20 févr. 2008 à 15:07
Salut
Idées en vrac :
Ta variable 'Choix' est orthographiée sans le X : normal (par rapport à ton MsgBox Choix) ?
Que vaut ta variable 'sql' juste après sa définition ?
Le contenu de 'choi' comporte t-il des apostrophes ' ? (si oui, il faut les doubler dans la chiane)
Où sont définis dts et dtt ?
Sont-ils du bon type ?
Ne devrais-tu pas travailler avec ton DataAdapter puisque tu utilises un filtre ?
marmo31
Messages postés14Date d'inscriptionsamedi 29 décembre 2007StatutMembreDernière intervention27 février 2008 20 févr. 2008 à 15:23
Merci pour ta réponse éclair ;)
Alors pour le x c'est une erreur de ma part à la création du sujet.
Si j'affiche la variable sql (ce que je n'avais pas pensé a faire :/) il semblerai qu'elle soit bonne :
Select * From Personne Where nom = 'monchoix';
Le contenu de la variable choi ne comporte pas d'apostrophes il s'agit juste d'un mot.
Pour ce qui en est des variables dts et dtt elles sont définis en tout début de classe. Pour ce qui en est de leur type c'est :
Private dts As New DataSet
Private dtt As DataTable
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 20 févr. 2008 à 18:19
Salut,
je pense que c' est ta requete qui ne retourne rien.
Autrement dit pas d' enregistrement.
D' ou l' erreur au niveau de TextBox.Text=Null , ce qui est totalement erroné.Puisque la propriété Text d' un TextBox ne peut contenir une valeur Nulle
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE&
Vous n’avez pas trouvé la réponse que vous recherchez ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 20 févr. 2008 à 18:54
messagebox.show(sql) ne retourne que le text de l' expression.
ça ne prouve rien.
T' as testé cette requête sous mon sgbd acces, et il retourne bien des valeurs,
On te crois.
Tu ne perds rien si, avant d' affecter, tu testes si ton dtt est plein !
ce qui me semble la moindre des choses.
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
<hr />
/PRE&
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 21 févr. 2008 à 01:36
Je ne connais pas trop .Net ni les DataTables (...) mais regarde si 'dtt' aurait une propriété .Count ou .RecordCount : ça te dira combien de fiche il a trouvé.
Jette aussi un oeil à une propriété .MoveNext ou une commande ressemblante qui dirait de se positionner sur le premier enregistrement trouvé (au cas où il y en ait plusieurs)
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
marmo31
Messages postés14Date d'inscriptionsamedi 29 décembre 2007StatutMembreDernière intervention27 février 2008 21 févr. 2008 à 11:10
J'ai réussi a trafiquer ma listbox et elle affiche correctement cependant j'ai un problème pour afficher les valeur dans les textbox associés. Enfin lorsque je clic sur le premier ou second élément lors du lancement du formulaire tout marche comme il faut, cependant si le formulaire se lance et que je clic sur un élément supérieur au second j'ai une erreur... Ce n'est pas tres clair je vous joins donc un screenshot
Je suppose donc que c'est un problème d'index, j'ai pas du tout comprendre à comment ceci fonctionnaient ...
Voici le code de ma listbox
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles ListBox1.Click
rownum = ListBox1.SelectedIndex
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
Dim choix As String
choix = ListBox1.Text
''ouverture de la connection(à partir du répertoire de _
l'application)sur la même ligne
cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = " _
& Application.StartupPath & "\Agenda.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = cnxstr
cnx.Open()
''Création de la requête sql
sql = _
"select nom,prenom,datenaissance from Personne where nom ='" _
& choix & "';"
''Création de la commande et on l'instancie (sql)
cmd = New OleDbCommand(sql)
''Création du dataadapter (dta) et on l'instancie (cmd)
dta = New OleDbDataAdapter(cmd)
''On instancie la commande (cmd) à la connection (cnx)
cmd.Connection() = cnx
''On charge le dataset (dts) grace à la propriété fill du _
dataadapter (dta)
dta.Fill(dts, "Personne")
''On charge la datatable (dtt) grace à la propriété tables du _
dataset (dts)
dtt = dts.Tables("Personne")
''Indiquer quelle colonne afficher
Me.TextBox1.Text = dtt.Rows(rownum).Item("Nom")
Me.TextBox2.Text = dtt.Rows(rownum).Item("Prenom")
Me.TextBox3.Text = dtt.Rows(rownum).Item("DateNaissance")
End Sub
et celui du chargement du formulaire
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ListBox1.Click
rownum = ListBox1.SelectedIndex
TextBox1.Enabled = True
TextBox2.Enabled = True
TextBox3.Enabled = True
Dim choix As String
choix = ListBox1.Text
''ouverture de la connection(à partir du répertoire de _
l'application)sur la même ligne
cnxstr = "provider = microsoft.jet.oledb.4.0 ; data source = " _
& Application.StartupPath & "\Agenda.mdb;"
cnx = New OleDbConnection
cnx.ConnectionString = cnxstr
cnx.Open()
''Création de la requête sql
sql = _
"select nom,prenom,datenaissance from Personne where nom ='" _
& choix & "';"
''Création de la commande et on l'instancie (sql)
cmd = New OleDbCommand(sql)
''Création du dataadapter (dta) et on l'instancie (cmd)
dta = New OleDbDataAdapter(cmd)
''On instancie la commande (cmd) à la connection (cnx)
cmd.Connection() = cnx
''On charge le dataset (dts) grace à la propriété fill du _
dataadapter (dta)
dta.Fill(dts, "Personne")
''On charge la datatable (dtt) grace à la propriété tables du _
dataset (dts)
dtt = dts.Tables("Personne")
''Indiquer quelle colonne afficher
Me.TextBox1.Text = dtt.Rows(rownum).Item("Nom")
Me.TextBox2.Text = dtt.Rows(rownum).Item("Prenom")
Me.TextBox3.Text = dtt.Rows(rownum).Item("DateNaissance")
End Sub, ----
(Coloration syntaxique automatique par Kenji)