logo UsualSoft   Skip Navigation Links
Accueil
Références
Formations
TutorielsExpand Tutoriels
Liens téléchargements

Contact : usualsoft@outlook.fr
Microsoft Certified Professional
Cours : Visual-Basic

Bases de données : 

La bibliothèque DAO

Claude Gruchet


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 :