Académique Documents
Professionnel Documents
Culture Documents
Dynaset Le plus souple. Permet des modifications sur des requêtes, mais c'est
le plus lent. N'accepte pas la méthode Seek
Table Le plus rapide, mais les Recordset de type table ne permettent pas les
requêtes. Ce genre de RecordSet permet la méthode Seek, la plus
rapide
Attention donc, lorsqu'on crée un RecordSet sans préciser si c'est un Dynaset, un Snapshot
ou un Table, Jet choisit le type qu'il pense le plus approprié. Mais comme toutes les
méthodes ne sont pas applicables sur tous les types de RecordSet, mieux vaut les déclarer
explicitement.
RecordSetClone
RecordSetClone est une instruction qui permet d'obtenir rapidement la copie conforme d'un
formulaire que l'on peut ensuite utiliser comme en DAO
L'exemple suivant reprend exactement ce qui se passe quand on demande une liste
déroulante avec l'assistant, et qu'on veut que le résultat du choix de cette liste cherche un
enregistrement dans ce même formulaire :
Move[X|Next|Last|Previous|First]
Cet exemple se positionne :
Enr.MoveP
revious '
Renvoie
immédiate
ment une
erreur
puisque
nous
sommes
déjà
avant le
premier
enregistr
ement
Move X
Il est possible de se déplacer en avant comme en arrière de X enregistrement avec cette
méthode
FORMATION VB ACCESS Dr YAHI MOHAMMED
Cet exemple positionne le pointeur d'abord sur le premier enregistrement avec MoveFirst,
ensuite il avance de 3 enregistrements et revient en arrière de deux. Attention à ne pas
oublier de placer l'Index correctement pour ne pas avoir des surprises.
NomPersonne Prenom
defawes michel
pochon pierre
rivares maria
allen woody
NomPersonne Prenom
de funès Louis
allen woody
delon alain
lhermitte thierry
Nous allons maintenant utiliser la méthode MoveFirst, mais avec des Index différents. La
table doit avoir ses deux champs indexés (NomPersonne et Prenom).
Dans ce premier cas, le MoveFirst nous envoie sur le premier enregistrement alphabétique
NomPersonne, càd ALLEN (Woody)
Dans ce deuxième cas, par contre, comme l'index est défini comme étant Prenom, le
MoveFirst nous renvoie sur le premier enregistrement du RecordSet, mais en prenant comme
base alphabétique Prenom, et c'est donc ALAIN (Delon) qui va sortir.
rec.Index = "Prenom"
rec.MoveFirst
MsgBox rec("Prenom") & " " & rec("NomPersonne")
Dans cet exemple, on ouvre la base de données test.mdb, on ouvre la table des fournisseurs,
on recherche les fournisseurs dont le nom est Kuhn, et on les remplace par Rivares. Ensuite,
on ferme la base de données.
Index
ATTENTION :
On crée T_Client
On y installe un champ DateNaissance
On l'indexe
On sauve la table
On renomme DateNaissance en DateDeNaissance
Cet exemple montre comment on recherche dans une table tous les enregistrement dont
l’âge est égal à 7 pour les remplacer par 8 et de recommencer l’opération jusqu'à ce qu’il
ne reste plus d’enregistrements correspondants Attention cet exemple ne marche qu’avec
des tables, et le champ recherché par seek doit avoir la proprété indexé à oui. Bien entenu, la
méthode seek est bien plus rapide que la méthode find
Attention : La méthode Seek nous renvoie sur un des enregistrements correspondants, s'il en
existe, mais on ne pru pas faire
MsgBox Enr("NomClient")
FindFirst
Attention _ J'ai testé la méthode FindFirst sur une base de données externe, et ça ne marche
que si le nom de la table ne contient pas de trait de soulignement.
Attention : Si on recherche un texte contenant une apostrophe, il faut la doubler pour que pas
d'erreur ne soir générée, comme ceci :
On pourra alors chercher correctement dans la table, comme ceci (Attention : Je constate que
si on omet la propriété Text de la zone d'édition de recherche, ça ne fonctionne plus.
NomPersonne Prenom
defawes michel
pochon pierre
rivares maria
rochat pierre
FORMATION VB ACCESS Dr YAHI MOHAMMED
Dans cet exemple, on va rechercher la première occurence de Pierre, puis une deuxième,
puis une éventuelle 3ème. Mais comme cette troisième occurence n'existe pas, la propriété
NoMatch est mise à Vraie, et le pointeur d'enregistrement reste planté sur la dernière
occurence trouvée, sans faire d'erreur.
Effacer un enregistrement
Delete
Dans cet exemple, on efface le premier enregistrement dont le prénom est Pierre. Attention :
Il faut que ce soit un Dynaset ou un Table
Est équivalent à :
Voici un autre exemple ou, cette fois, la requête est paramétrée sur un formulaire de façon à
ce qu'elle extraie l'ensemble des enregistrements du sous-formulaire VenteDetail du
formulaire Vente. Il est a noter qu'il n'est pas possible de baser un RecordSet sur une requete
FORMATION VB ACCESS Dr YAHI MOHAMMED
parametree, car on dirait bien qu'Access refuse d'aller extraire un parametre (par exemple
dans un formulaire) au moment ou on le definit comme un Recordset. La seule solution reste
la chaine SQL comme dans l'exemple suivant :
Set RequeteListeDetailCetteVente =
CurrentDb.OpenRecordset("SELECT * FROM T_VenteDetail
Where IDVente = " & Me![IDVente])
With