Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Enregistrements d'une base de données externe
Grâce aux développements des volets précédents, nous avons appris à récolter les
noms des tables ,
requêtes ,
formulaires et
états d'
autres bases de données . Ici, nous allons apprendre Ã
lire les enregistrements d'une
table d'une
autre base de données , grâce au
code VBA Access .
Le formulaire illustré par la capture résume les travaux accomplis jusqu'alors. Un bouton permet de lister les
noms des bases de données , issues d'un dossier, dans une première zone de liste. Dès lors, au clic de l'utilisateur sur l'un de ces noms, tous les
objets de la base de données désignée sont restitués dans quatre autres zones de liste. Et désormais, si l'utilisateur clique sur l'une des
tables de cette
base externe , ce sont
tous ses enregistrements qui sont lus et restitués dans une zone de texte, placée dans la partie inférieure du formulaire.
Base de données Access à télécharger
Pour finaliser cette application, nous devons récupérer la
base de données qui consolide tous les travaux précédents.
Télécharger le fichier compressé lire-enregistrements-autre-bdd.rar en cliquant sur ce lien ,
Le décompresser dans le dossier de votre choix,
Double cliquer sur le fichier résultant pour l'ouvrir dans Access ,
Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
Dans le volet de navigation, double cliquer sur le formulaire fParcourir pour l'exécuter,
Sur le formulaire, cliquer sur le petit bouton à l'icône d'un dossier,
Dans la boîte de dialogue qui suit, ouvrir un dossier contenant des bases de données Access ,
Valider par le bouton Ok pour revenir sur le formulaire,
Dans la première zone de liste, cliquer sur l'un des noms de base ainsi importé par le VBA,
De cette manière, vous obtenez les
noms de tous les objets qui lui appartiennent, répartis dans les quatre autres zones de liste. Mais à ce stade bien entendu, si vous cliquez sur l'une de ses tables dans la deuxième zone de liste, la zone de texte en bas du formulaire, reste muette.
C'est tout l'enjeu de ce dernier développement. Nous devons être capables d'
accéder aux enregistrements de cette table pour la
base externe désignée, afin de les
lire et de les restituer.
La déclaration des variables
Pour débuter, nous avons besoin de gérer l'
événement du clic sur la deuxième
zone de liste . Elle est nommée
lesTables .
A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage ,
Dans les propositions, choisir le mode Création ,
Sur le formulaire en conception, cliquer sur la deuxième zone de liste pour la sélectionner,
Dès lors, activer l'onglet Evénement de sa feuille de propriétés ,
Cliquer sur le petit bouton associé à son événement Au clic ,
Dans la boîte de dialogue qui suit, choisir le générateur de code et valider par Ok,
Nous basculons ainsi dans l'
éditeur VBA Access , entre les bornes de la
procédure événementielle lesTables_Click .
Avant tout, nous avons besoin d'objets pour piloter la base de données distante et ses enregistrements.
Dans les bornes de la procédure, ajouter les déclarations de variables suivantes :
Private Sub lesTables_Click()
Dim autreBdd As Access.Application: Dim enr As Recordset
Dim chemin As String: Dim i As Byte
End Sub
L'
objet autreBdd doit servir à instancier la
classe Access pour pointer sur la
base de données externe à piloter. Nous typons l'
objet enr comme un
Recordset pour qu'il puisse prendre possession des
enregistrements d'une table dans cette
base . La
variable chemin doit reconstruire le
chemin d'accès complet à ce
fichier externe pour que l'
instance d'Access que nous allons créer, puisse pointer sur la
base de données désignée . Enfin, nous utiliserons la
variable i comme
compteur de boucle pour
parcourir tous les champs de la table à analyser. En effet, il est question de restituer tout le détail pour
tous les enregistrements .
Le chemin d'accès et l'instance d'Access
Maintenant que les variables sont prêtes, nous allons pouvoir en initialiser certaines. Concernant le
chemin d'accès souvenez-vous, les informations ont été stockées dans les deux
zones de texte masquées , nommées respectivement
acces et
laBdd . Il s'agit de l'
accès au dossier de la base à traiter et du
nom même de cette base. Pour créer une
nouvelle instance d'Access , il est question d'exploiter la
fonction VBA CreateObject , comme souvent quand il s'agit d'instancier une classe.
Après la déclaration des variables, ajouter les instructions VBA suivantes :
...
lesEnregistrements.Value = ""
chemin = acces.Value & "\" & laBdd.Value
Set autreBdd = CreateObject("Access.Application")
autreBdd.OpenCurrentDatabase chemin
autreBdd.Visible = False
...
Tout d'abord, nous réinitialisons le contenu de la zone de texte destinée à accueillir l'extraction des enregistrements, en réglant sa
propriété Value sur "du vide" (""). Nous recomposons le
chemin d'accès complet à la
base de données dans la
variable chemin . Nous initialisons (Set) l'
objet autreBdd sur une
instance d'Access grâce au
paramètre Access.Application passé à la
fonction CreateObject . Dès lors, nous exploitons sa
méthode héritée OpenCurrentDatabase en lui passant le
chemin de la base de données à piloter. C'est ainsi que nous pourrons ensuite accéder aux enregistrements de ses tables. Mais la
variable enr n'est pas encore initialisée. Enfin, nous réglons Ã
false la
propriété Visible de cette
instance pour que les
traitements VBA se réalisent en
tâches de fond et ne s'affichent pas à l'écran.
Piloter les enregistrements externes
Maintenant que l'
instance est créée pour piloter une
autre base de données Access , nous allons pouvoir
accéder aux enregistrements de ses tables . Mais pour cela, nous devons d'abord initialiser l'
objet enr afin qu'il hérite des propriétés et méthodes pour
manipuler les enregistrements .
A la suite du code VBA, ajouter les instructions suivantes :
...
Set enr = autreBdd.CurrentDb.OpenRecordset(lesTables.Value)
enr.MoveFirst
...
En exploitant la
méthode CurrentDb de l'
instance autreBdd , nous définissons cette
base de données externe comme la
base de données active à étudier. Grâce à sa
méthode enfant OpenRecordset , nous définissons le
jeu d'enregistrements à analyser en lui passant le
nom de la table en paramètre. C'est la
propriété Value de la
zone de liste nommée
lesTables qui retourne le nom de la table cliquée par l'utilisateur. Dès lors, nous exploitons la
méthode héritée MoveFirst par l'
objet enr , pour placer le pointeur de lecture sur le
premier enregistrement de la table .
Parcourir les enregistrements externes
Dès lors, nous pouvons engager une boucle classique pour
parcourir tous les enregistrements de la table ainsi désignée, du premier au dernier.
A la suite du code VBA, créer la boucle suivante :
...
Do
enr.MoveNext
Loop While Not enr.EOF
...
Nous bouclons (Do Loop) jusqu'au
dernier enregistrement (While Not enr.EOF).
EOF signifie
End Of File . Comprenez "fin des enregistrements". A chaque passage et après chaque traitement non encore codé, nous n'oublions pas de déplacer le pointeur de lecture sur l'
enregistrement suivant , grâce à la
méthode MoveNext de l'
objet enr .
Parcourir les champs de la table externe
Comme il est question de récolter
toutes les informations de
tous les enregistrements , nous devons engager une
seconde boucle dans cette
première boucle . Mais il s'agit d'une
boucle bornée (For Next) car la
propriété Count de la
collection Fields pour l'
objet enr renseigne sur le
nombre de champs contenus dans la
table . Ce sont ces champs que nous devons parcourir pour chaque enregistrement, de manière à récolter les informations de chaque colonne.
Dans les bornes de la boucle Do, ajouter les instructions VBA suivantes :
...
For i = 0 To enr.Fields.Count - 1
lesEnregistrements.Value = lesEnregistrements.Value & enr.Fields(i).Value & " "
Next i
lesEnregistrements.Value = lesEnregistrements.Value & "<br/>"
...
Pour chaque enregistrement, nous parcourons les champs du premier (0) au dernier (enr.Fields.Count- 1). A chaque passage, nous consolidons (lesEnregistrements.Value = lesEnregistrements.Value) la donnée du champ en cours avec les précédentes (& enr.Fields(i).Value & " ") dans la zone de texte nommée
lesEnregistrements . Dès lors que tous les champs ont été passés en revue, soit après la seconde boucle qui reprendra au prochain passage de la première, nous ajoutons un saut de ligne (<br/>). Ce saut de ligne Html est rendu possible car l'attribut
Format de texte de cette zone à été réglé sur la valeur
Texte enrichi dans l'
onglet Données de sa
feuille de propriétés . C'est ainsi que nous disposons les données de chaque enregistrement sur des lignes différentes.
Décharger les objets pour libérer les ressources
Comme vous le savez et comme il est de coutume, une fois que les objets déclarés ne sont plus utilisés, nous devons les fermer et les détruire pour libérer la mémoire de l'ordinateur.
...
enr.MoveNext
Loop While Not enr.EOF
enr.Close
autreBdd.Quit
Set enr = Nothing
Set autreBdd = Nothing
...
Nous exploitons les
méthodes respectives
Close et
Quit pour fermer le jeu d'enregistrements et l'instance d'Access. Puis, nous réinitialisons (Set) ces deux objets Ã
Nothing pour les sortir de la mémoire.
Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
Exécuter ce dernier en enfonçant par exemple la touche F5 du clavier,
Sur le formulaire, cliquer sur le bouton matérialisé par l'icône d'un dossier,
Dans la boîte de dialogue qui suit, ouvrir un dossier contenant des bases de données Access ,
Puis, cliquer sur le bouton Ok pour revenir sur le formulaire Access ,
Dans la première zone de liste, cliquer sur l'un des noms de bases importés,
Dès lors, dans la deuxième zone de liste, cliquer sur l'une de ses tables,
Comme vous pouvez le voir et moyennant un temps de traitement,
tous les enregistrements de la table externe ainsi désignée, sont parfaitement reconstitués et importés dans la zone de texte enrichie en bas du formulaire.