Comment passer à l'enregistrement suivant dans une bdd???

Résolu
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 juin 2007 - 13 nov. 2006 à 18:03
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 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ù...

Voici le code, si qqun peut m'aider. Merci!

   With Principale
        .Dataexpert.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" _
                            & "SERVER=localhost;" _
                            & "DATABASE=ma_base;" _
                            & "UID=root;" _
                            & "PWD=;" _
                            & "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
        .Dataexpert.RecordSource = "SELECT * FROM ma_table WHERE n_dossier= '" & Saisiebien.Text(37).Text & "' AND titre= '" & Titre.Caption & "'"
        .Dataexpert.Refresh
       
        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

9 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 nov. 2006 à 18:16
C'est peut-être .Dataexpert.RecordSet!NomDuChamp, à vérifier
3
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 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!
3
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 juin 2007
13 nov. 2006 à 18:04
Oups! J'ai oublié : Y est une variable qui contient le nombre d'enregistrements à afficher.
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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
0

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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
0
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 juin 2007
14 nov. 2006 à 11:07
Ok merci beaucoup! Je vais essayer ça dès ce soir.
0
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 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...
0
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 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.
0
cs_manzy Messages postés 31 Date d'inscription mercredi 10 mai 2006 Statut Membre Dernière intervention 20 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!
0
Rejoignez-nous