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 02/09/2011, 18h12   #1
Invité régulier
 
Homme Gérard Wolf
Ingénieur développement logiciels
Inscription : décembre 2006
Messages : 23
Détails du profil
Informations personnelles :
Nom : Homme Gérard Wolf
Âge : 63
Localisation : Belgique

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : décembre 2006
Messages : 23
Points : 6
Points : 6
Par défaut Passer à l'enregistrement suivant s'il y en a

Bonjour à tous !

Dans un formulaire en continu, j'ai placé un bouton dans le pied de formulaire.
En poussant ce bouton on effectue une certaine action sur l'enregistrement en cours, puis on doit passer à l'enregistrement suivant. S'il n'y a pas d'enregistrement suivant, on doit sauver l'enregistrement en cours.

J'utilise Access 2003.
J'ai programmé cela comme suit :

Code :
1
2
3
4
5
If Me.CurrentRecord < Me.Recordset.RecordCount Then
    DoCmd.GoToRecord , , acNext
Else
    DoCmd.RunCommand acCmdSaveRecord
End If
Cela fonctionne mais je voudrais optimiser le code.

A propos de "Me.CurrentRecord < Me.Recordset.RecordCount" :
1. Ca fonctionne aussi avec Me.RecordsetClone.RecordCount
Quelle différence ? Qu'est-ce qui est mieux ? Plusieurs utilisateurs peuvent "attaquer" la même base de données.

2. Le RecordCount ne prend-il pas "beaucoup" de temps d'exécution ? Est-il plus rapide de tester recordset.eof ?
Comment faire ?

A propos de "DoCmd.GoToRecord , , acNext"
3. Me.Recordset.MoveNext fonctionne aussi. Qu'est-ce qui est mieux et pourquoi ?

A propos de "DoCmd.RunCommand acCmdSaveRecord"
4. Y a-t-il une alternative utilisant me.recordset ? Est-ce préférable ?

Merci pour votre aide,

Gérard
gerard101 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 09h11   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 089
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 089
Points : 11 622
Points : 11 622
Bonjour,
Quelques réponses :

Citation:
Envoyé par gerard101 Voir le message
S'il n'y a pas d'enregistrement suivant, on doit sauver l'enregistrement en cours.
Lorsqu'on change d'enregistrement le précédent est enregistré si il a été modifié (dirty = true). Sauf si le comportement d'ACCESS a été modifié (voir les options).

Code :
1
2
3
4
5
If Me.CurrentRecord < Me.Recordset.RecordCount Then
    DoCmd.GoToRecord , , acNext
Else
    DoCmd.RunCommand acCmdSaveRecord
End If
L'optimisation à ce niveau est négligeable et non perceptible.

Citation:
A propos de "Me.CurrentRecord < Me.Recordset.RecordCount" :
1. Ca fonctionne aussi avec Me.RecordsetClone.RecordCount
Quelle différence ? Qu'est-ce qui est mieux ? Plusieurs utilisateurs peuvent "attaquer" la même base de données.
Recordsetclone est le même recordset mais non updatable. Les 2 propriétés rapporte la même valeur. Pas de différence en multi, puisqu'il n'y a pas de verrou posé lors de la consultation de cette propriété.

Citation:
2. Le RecordCount ne prend-il pas "beaucoup" de temps d'exécution ? Est-il plus rapide de tester recordset.eof ?
Comment faire ?
cf remarque ci-dessus. Eof permet de savoir si l'on est à la fin alors que recordcount indique le nombre d'enregistrement. Ceci dit dans ton eof ne pourra pas t'aider. En effet Eof reste faux tant que tu es sur un erengistrement même le newrecord. Il te faudrait tester
ps : Si Newrecord, Recordcount est égal à currentrecord + 1

Citation:
A propos de "DoCmd.GoToRecord , , acNext"
3. Me.Recordset.MoveNext fonctionne aussi. Qu'est-ce qui est mieux et pourquoi ?
Même chose mais l'une est une commande Access l'autre une méthode DAO.


Citation:
A propos de "DoCmd.RunCommand acCmdSaveRecord"
4. Y a-t-il une alternative utilisant me.recordset ? Est-ce préférable ?
Il y a une alternative.
Je pense qu'à ce niveau tu perds ton temps à vouloir chercher une optimisation significative. Ce n'est qu'un affaire de faciliter/préférence de lecture pour toi.

Personnellement, et au vu des remarques précédentes, je regarderais plutot la pertinence fonctionnelle de ce comportement. A moins que ne pas passer sur un nouvel enregistrement soit valide.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h32.


 
 
 
 
Partenaires

Hébergement Web