La Bibliothèque DAO
Elle permet l'accès natif à une base Ms Access sans DataControl. Cela permet de
nombreuses actions qui seraient difficiles, voir impossible avec le contrôle
ActiveX.
Pour pouvoir utiliser cette bibliothèque il faut tout d’abord, référencer la bibliothèque de types Microsoft
DAO
dans le projet VB. Ensuite, il faudra coder tous les accès à la base de
données, nous ne bénéficierons plus des automatismes du contrôle.
Dans le menu « Projet » choisissez « Références »
et, dans la liste qui
s’affiche, cochez « Microsoft DAO 3.51 Object Library » si vous
utilisez Ms Access 97, ou « Microsoft DAO 3.6 Object Library »
si vous utilisez Ms Access 2000 (pour Ms Access 2000 vous pouvez aussi utiliser la DAO 4.x)
Grâce à cette référence vous serez en mesure
d’utiliser des objets tels que : DBEngine, WorkSpace, DataBase,
TableDef,
RecordSet ou Field.
|
Pour connaître les divers objets disponibles dans une
bibliothèque ainsi que leurs propriétés et méthodes, utilisez
l’explorateur d’objet
(F2) et sélectionnez la bibliothèque à explorer
dans la liste déroulante en haut de la boite de dialogue.
|
La bibliothèque DAO
Étudions rapidement les notions indispensables à connaître pour commencer avec DAO :
|
Objets de la bibliothèque DAO
|
| DbEngine
|
Représente le moteur même de Ms-Access.
|
| DataBase
|
C'est grâce à cet objet que nous pourrons nous connecter à la base de
données.
Voici un exemple d'ouverture d'une base Ms Access en mode partagé. Vous
apprécierez la simplicité du code source !
Dim mdb As DataBase
Set mdb = OpenDataBase( "C:\MaBase.Mdb" )
|
|
TableDef
|
C'est un objet qui représente la structure
de la table. Il permettra d'accéder à l'ensemble des propriétés de la
table puis, grâce à l'objet Field, à celles de tous ses
champs.
|
| RecordSet
|
Un RecordSet est un jeu
d'enregistrements : une table ou, plus souvent, le résultat d'une
requête SELECT.
|
|
Field
|
Les possibilités de traitement liées à
l'objet Field (membre de la collection Fields) dépendent du parent de celui-ci. Ce parent
peut être un objet TableDef (représente le contenant) ou un objet RecordSet
(représente le contenu) .
|
|
Property
|
Permet d'accéder à une propriété de l'un
des objets ci-dessus. On utilise la collection Properties desdits
objets pour lister l'ensemble de leurs propriétés.
|
 |
La plupart de ces objets font partie de collections système :
Par exemple, DataBases contient tous les objets
DataBase ouverts, TableDefs contient toutes les structures de tables
d'une base de données, Fields contient les champs d'une TableDef (ou
d'un RecordSet), Properties contient les objets Property liés à un
champ, une table ...
|
Les
différents types de RecordSets
| Type |
Remarques |
| SnapShot |
En lecture seule. Un Snapshot est plus rapide
à ouvrir qu'un Dynaset. |
| Dynaset |
Permet la mise à jour. La propriété "LockEdits"
permet de gérer le degré d'utilisation des verrous. |
L'utilisation des collections est quasi incontournable
lorsque l'on travaille avec les bibliothèques d'accès aux données. Si cette
notion ne vous est pas familière, n'hésitez pas à consulter
la page de ce site traitant des collections système.
Parcourir la structure d'une DataBase
Vous allez voir qu'en utilisant la bibliothèque DAO il est étonnamment simple de
parcourir toute la structure d'une base de données Ms Access. Il devient, dès
lors, relativement simple de construire un programme de documentation
"maison" en utilisant conjointement la bibliothèque WinWord.
Nous avons vu, plus haut, comment se connecter à la base de données, voyons,
maintenant, comment lister le nom de toutes les tables de la base. Pour cela,
nous allons utiliser la collection "TableDefs".
Voici l'exemple d'une boucle de lecture des noms de tables pour une base Ms Access.
Nous utilisons, ici, la propriété name de chaque élément que nous affichons
dans la fenêtre d'exécution.
|
Dim mdb As DataBase
tdf As Tabledef
Set mdb = OpenDataBase( "C:\MaBase.Mdb")
for each tdf in mdb.TableDefs
Debug.Print "Table " & tdf.Name
Next tdf
mdb.close
|
De la même façon, il est très simple de lister tous les champs d'une table. La
technique est sensiblement similaire (ici, on suppose que la base est déjà
ouverte) :
|
dim tdf as TableDef
dim fld as Field
set tdf = mdb.TableDefs( "Clients" )
'Structure de la table Clients
for each fld in tdf.Fields
Debug.Print "Champ " & fld.Name
next fld
|
Nous n'utilisons, ici, que' la propriété Name. Voici une liste (non exhaustive) des
autres propriétés de l'objet Field qui sont fréquemment utilisées
dans le code d'applications de gestion :
| Propriété |
Utilisation |
| AllowZeroLength |
Correspond à la propriété "Chaîne
vide autorisée" de la base Ms Access. C'est un booléen (vrai ou
faux) qui n'est utilisable que dans le cas de champs texte ou mémo.
|
| Required |
Correspond à la propriété "Null
interdit" de la base Ms Access. C'est un booléen (vrai ou faux).
|
| Size |
Taille maxi du champ en octets (surtout
utile pour les champs texte.
|
| Type |
Type du champ. Il s'agit d'un entier mais
il existe un ensemble de constantes à utiliser avec cette propriété (dbText,
dbMemo, dbInteger, dbLong, dbDate, dbSingle, dbBoolean, etc, etc ... ...)
|
| Value |
Valeur du contenu du champ. |
Toujours en utilisant la notion de collection
système, il est facile de lister toutes les propriétés d'un champ (ou d'une
table). On suppose, ici, que la base et l'objet TableDef ont été initialisés
avant:
|
dim fld as Field
dim prp as Property
'On pointe sur le chmp Nom de la table Clients
set fld = mdb.TableDefs("Clients").Fields("Nom")
For each prp in fld.Properties
Debug.Print "Propriété " & prp.Name & "= "
& (prp.Value & "")
next prp
|
|
|
Notez l'utilisation d'une concaténation
avec une chaîne vide pour l'affichage du contenu de la propriété
value de l'objet property. C'est une précaution simple pour éviter des
problèmes avec les valeurs nulles. Nous aurions pu, aussi, utiliser un
test de type "if not IsNull( prp.value ) then
..." mais l'astuce utilisée ici permet un code plus compact
et plus lisible.
|
Utiliser un RecordSet (interroger le contenu de la base de données)
Un Recordset est un jeu d'enregistrements résultant d'une requête SQL de type
"SELECT". On l'initialise grâce à la méthode OpenRecordSet de
l'objet DataBase.
Utiliser des requêtes "action" (Update, Delete ...)
Les requêtes "action" SQL (utilisant une clause autre que SELECT). Ne
retournent pas de jeu d'enregistrements mais exécutent une action sur les
données contenues dans la base (ajout, mise à jour, suppression ...).
Elles sont exécutées grâce à la méthode Execute de l'objet DataBase.
Travaux dirigés
Tentons une mise en oeuvre des objets de la
bibliothèque DAO :