Comment passer à l'enregistrement suivant dans une bdd??? [Résolu]

Signaler
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007
-
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
C'est peut-être .Dataexpert.RecordSet!NomDuChamp, à vérifier
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007

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!
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007

Oups! J'ai oublié : Y est une variable qui contient le nombre d'enregistrements à afficher.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
(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
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007

Ok merci beaucoup! Je vais essayer ça dès ce soir.
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007

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...
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007

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.
Messages postés
31
Date d'inscription
mercredi 10 mai 2006
Statut
Membre
Dernière intervention
20 juin 2007

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!