Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2010, 22h26   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Par défaut Problème Recordset form

Bonsoir,

J'ai un problème avec mon code, je dois gérer une base de donnée sous Access, j'ai créer un formulaire, ce formulaire affiche le nom et prénom d'une personne.
J'ai également 2 boutons : personne suivante et personne précédente.

Voici mon code :

Pour le bouton Suivant par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub suivant_Click()
 
    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.Open "SELECT * FROM PERSONNE", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
 
    If rst.RecordCount <> 0 Then
        rst.MoveFirst
        While Not rst.EOF
            TXTN.Value = rst.Fields("Nom")
            TXTP.Value = rst.Fields("Prénom")
            rst.MoveNext
        Wend
    Else
        MsgBox "Pas d'enregistrement"
    End If
 
    rst.Close
 
End Sub
Déjà quand j'ouvre mon formulaire, il y a de suite le dernier nom et prénom de la table PERSONNE.
Alors qu'il doit afficher le premier nom et prénom ?

Donc si je fais suivant, il ne se passe rien, si je fais précédent j'ai le message:

BOF ou EOF est égal à true ou l'enregistrement actuel a été supprimé...


Merci de votre aide!
thib01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 01h02   #2
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
Salut !

Je vais seulement commenter ton code, et tu vas deviner ton souci ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub suivant_Click()
'Cet évènement se produira à chaque fois que je ferai un clic sur le bouton suivant
'Le code à exécuter sera le suivant :
'J'ai besoin d'un objet de type recordset qui s'appellera rst
    Dim rst As ADODB.Recordset
'Je définis cet objet comme étant un nouvel objet Recordset de la bibliothèque ADODB
    Set rst = New ADODB.Recordset
'J'ouvre maintenant le recordset
'il a pour source la selection de tous les champs de la datasource PERSONNE
'il est ouvert sur la connection du projet actuel
'et je maintiens un jeu de clé pour les mises à jour optimistes
    rst.Open "SELECT * FROM PERSONNE", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
's'il y a des enregistrements, alors
    If rst.RecordCount <> 0 Then
'je vais sur le premier enregistrement
        rst.MoveFirst
'et tant que je ne suis pas arrivé à la fin de ce recordset
        While Not rst.EOF
'je remplis la valeur de TXTN avec la valeur du champ Nom de l'enregistrement actuel
            TXTN.Value = rst.Fields("Nom")
'et la valeur de TXTP avec la valeur du champ Prénom du même enregistrement
            TXTP.Value = rst.Fields("Prénom")
'puis je vais à l'enregistrement suivant
            rst.MoveNext
'et je recommence
        Wend
'sinon
    Else
'j'affiche qu'il n'y a pas d'enregistrement
        MsgBox "Pas d'enregistrement"
'fin des tests
    End If
'fermeture de mon objet recordset
    rst.Close
'et fin de la gestion de l'évènement
End Sub
Tu vois le souci ?
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 15h09   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Citation:
Envoyé par Maxence HUBICHE Voir le message
Salut !

Je vais seulement commenter ton code, et tu vas deviner ton souci ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub suivant_Click()
'Cet évènement se produira à chaque fois que je ferai un clic sur le bouton suivant
'Le code à exécuter sera le suivant :
'J'ai besoin d'un objet de type recordset qui s'appellera rst
    Dim rst As ADODB.Recordset
'Je définis cet objet comme étant un nouvel objet Recordset de la bibliothèque ADODB
    Set rst = New ADODB.Recordset
'J'ouvre maintenant le recordset
'il a pour source la selection de tous les champs de la datasource PERSONNE
'il est ouvert sur la connection du projet actuel
'et je maintiens un jeu de clé pour les mises à jour optimistes
    rst.Open "SELECT * FROM PERSONNE", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
's'il y a des enregistrements, alors
    If rst.RecordCount <> 0 Then
'je vais sur le premier enregistrement
        rst.MoveFirst
'et tant que je ne suis pas arrivé à la fin de ce recordset
        While Not rst.EOF
'je remplis la valeur de TXTN avec la valeur du champ Nom de l'enregistrement actuel
            TXTN.Value = rst.Fields("Nom")
'et la valeur de TXTP avec la valeur du champ Prénom du même enregistrement
            TXTP.Value = rst.Fields("Prénom")
'puis je vais à l'enregistrement suivant
            rst.MoveNext
'et je recommence
        Wend
'sinon
    Else
'j'affiche qu'il n'y a pas d'enregistrement
        MsgBox "Pas d'enregistrement"
'fin des tests
    End If
'fermeture de mon objet recordset
    rst.Close
'et fin de la gestion de l'évènement
End Sub
Tu vois le souci ?

Non pas trop
ça me parait normal tes commentaires
thib01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 15h20   #4
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
OKay...

Et, est-ce que cela te parait normal qu'à chaque clic sur le bouton suivant, tu ailles parcourir la totalité de ton recordset pour terminer sur le dernier ?
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2010, 15h28   #5
Invité de passage
 
Inscription : décembre 2010
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 3
Points : 1
Points : 1
Citation:
Envoyé par Maxence HUBICHE Voir le message
OKay...

Et, est-ce que cela te parait normal qu'à chaque clic sur le bouton suivant, tu ailles parcourir la totalité de ton recordset pour terminer sur le dernier ?
Non

Je dois donc déclarer mon recordset et effectuer la connexion en dehors de la fonction ?


J'ai réussi !
thib01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h45.


 
 
 
 
Partenaires

Hébergement Web