cs_manzy
Messages postés31Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention20 juin 2007
-
13 nov. 2006 à 18:03
cs_manzy
Messages postés31Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention20 juin 2007
-
17 nov. 2006 à 14:21
Bonsoir tout le monde.
J'ai un problème avec une requête sur une base mysql...
Dans cette base, j'ai notamment un champ ID en auto-incrémentation.
En fait, je veux retrouver tous les enregistrements qui ont le même numéro de dossier et le même titre et afficher leur contenu dans une textbox chacun.
Mais pour l'instant, ça affiche le même enregistrement dans tous mes textbox... Je pense que le problème se situe au niveau de mon MoveNext, mais je ne vois pas où...
X = 0
Do While (X < Y) And (.Dataexpert.Recordset.EOF <> True)
Set Textbox(X).DataSource = .Dataexpert
Textbox(X).DataField = "Contenu"
.Dataexpert.Recordset.MoveNext
.Dataexpert.Refresh
X = X + 1
Loop
End With
A voir également:
Comment passer à l'enregistrement suivant dans une bdd???
cs_manzy
Messages postés31Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention20 juin 2007 17 nov. 2006 à 14:21
Voilà, ça marche (si qqun rencontre le même problème que moi...) :
With Principale
.Dataexpert.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=localhost;" _
& "DATABASE=base_amiante;" _
& "UID=root;" _
& "PWD=;" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
.Dataexpert.RecordSource = "SELECT * FROM table2 WHERE n_dossier= '" & Saisiebien.Text(37).Text & "' AND partie_composant= '" & Titre.Text & "'"
.Dataexpert.Refresh
If .Dataexpert.Recordset.EOF <> True Then
X = 0
Do While X < Y And .Dataexpert.Recordset.EOF <> True
Set Textbox(X).DataSource = .Dataexpert
Textbox(X).Text = .Dataexpert.Recordset!Contenu
X = X + 1
Loop
End If
End With
Encore merci à Jack, je n'avai pas pris ton code comme il fallait mais en fait il marche nickel!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 nov. 2006 à 18:15
Salut
Je pense que c'est normal puisque tu associes chaque TextBox à ton DataExpert
Set Textbox(X).DataSource = .Dataexpert
Textbox(X).DataField = "Contenu"
DataExpert est un objet dynamique, donc chaque TextBox ainsi connecté affichera l'enregistrement en cours de sélection. Les TextBox sont rafraichis à chaque fois que tu changes d'enregistrement.
En fait, il ne faut pas associer le DataSource, mais le texte de l'Item
Set Textbox(X).Text = .Dataexpert!NomDuChamp
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accroit quand on
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 nov. 2006 à 18:20
(encore moi)
Le .Dataexpert.Refresh ne sert à rien (sauf à perdre du temps) puisque, avec cette commande, tu lui demandes de relire les données dans la DB. Ce n'est pas nécessaire.
... et, si ça se trouve, c'est cette commande qui remet l'index sur le 1er enregistrement.
Essaye de supprimer cette ligne en premier pour voir si ça corrige ton problème.
Ajoute aussi un .Dataexpert.RecordSet.MoveFirst avant de commencer ton Do-Loop
cs_manzy
Messages postés31Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention20 juin 2007 15 nov. 2006 à 09:25
J'ai testé tous ce que tu m'as dit et .Dataexpert.RecordSet!NomDuChamp n'a pas l'air de fonctionner...
Mon code ressemble à ça maintenant :
With Principale
.Dataexpert.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=localhost;" _
& "DATABASE=base_amiante;" _
& "UID=root;" _
& "PWD=;" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
.Dataexpert.RecordSource = "SELECT * FROM table2 WHERE n_dossier= '" & Saisiebien.Text(37).Text & "' AND partie_composant=' " & Titre.Caption & "'"
If .Dataexpert.Recordset.EOF = True Then
.Dataexpert.Recordset.AddNew
.Dataexpert.Recordset.Fields(1) = Saisiebien.Text(37).Text
.Dataexpert.Recordset.Fields(2) = Titre.Caption
Else
.Dataexpert.Refresh
.Dataexpert.Recordset.MoveFirst
X = 0
Do While (X < Y) And (.Dataexpert.Recordset.EOF <> True)
Set Textbox(X).DataSource = .Dataexpert
Textbox(X).DataField = "Contenu"
.Dataexpert.Recordset.MoveNext
X = X + 1
Loop
End If
End With
Apparemment, il n'y a pas de problème pour créer un nouvel enregistrement (il "passe" sur .Dataexpert.Recordset.AddNew et sur .Dataexpert.Recordset.Fields(1) = Saisiebien.Text(37).Text quand il n'y a pas d'enregistrement existant dans la base) mais j'ai un message d'erreur sur le Titre.Caption : erreur 3265 : élément non trouvé dans cette collection(...).
Je ne vois vraiment pas d'ou ça peut venir...
cs_manzy
Messages postés31Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention20 juin 2007 15 nov. 2006 à 09:56
tout simplement, j'ai oublié un .dataexpert.refresh après mon .dataexpert.recordsource...
Mais j'en revient approximativement aux mêmes problèmes... Merci pour ton aide, jack.
Je vai me creuser un peu la cervelle et je reviendrai sur ce post dès q j'aurai trouvé la solution.
cs_manzy
Messages postés31Date d'inscriptionmercredi 10 mai 2006StatutMembreDernière intervention20 juin 2007 17 nov. 2006 à 14:21
Voilà, ça marche (si qqun rencontre le même problème que moi...) :
With Principale
.Dataexpert.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=localhost;" _
& "DATABASE=base_amiante;" _
& "UID=root;" _
& "PWD=;" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
.Dataexpert.RecordSource = "SELECT * FROM table2 WHERE n_dossier= '" & Saisiebien.Text(37).Text & "' AND partie_composant= '" & Titre.Text & "'"
.Dataexpert.Refresh
If .Dataexpert.Recordset.EOF <> True Then
X = 0
Do While X < Y And .Dataexpert.Recordset.EOF <> True
Set Textbox(X).DataSource = .Dataexpert
Textbox(X).Text = .Dataexpert.Recordset!Contenu
X = X + 1
Loop
End If
End With
Encore merci à Jack, je n'avai pas pris ton code comme il fallait mais en fait il marche nickel!