Académique Documents
Professionnel Documents
Culture Documents
Ce support constitue un cours d'introduction l'accs aux donnes dans une base
Access via DAO (Data Access Object). Il ne ncessite pas de connaissance pointue en
programmation hormis les bases du langage VBA.
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
3.3.2.4 - Name...........................................................................................................................................25
3.3.2.5 - Properties.................................................................................................................................... 25
3.3.2.6 - QueryDefs................................................................................................................................... 25
3.3.2.7 - RecordsAffected.......................................................................................................................... 25
3.3.2.8 - Recordsets.................................................................................................................................. 26
3.3.2.9 - Relations..................................................................................................................................... 26
3.3.2.10 - TableDefs.................................................................................................................................. 26
3.3.2.11 - Transactions.............................................................................................................................. 26
3.3.2.12 - Updatable.................................................................................................................................. 27
3.3.2.13 - Version...................................................................................................................................... 27
3.3.3 - Liste des mthodes............................................................................................................................. 27
3.3.3.1 - Close........................................................................................................................................... 27
3.3.3.2 - CreateProperty............................................................................................................................ 27
3.3.3.3 - CreateQueryDef.......................................................................................................................... 27
3.3.3.4 - CreateRelation............................................................................................................................ 28
3.3.3.5 - CreateTableDef........................................................................................................................... 28
3.3.3.6 - Execute....................................................................................................................................... 28
3.3.3.7 - NewPassword............................................................................................................................. 28
3.3.3.8 - OpenRecordset........................................................................................................................... 29
4 - DAO et la structure d'une base de donnes....................................................................................................... 30
4.1 - Gnralits...................................................................................................................................................30
4.2 - Les proprits spcifiques...........................................................................................................................30
4.2.1 - Dfinitions............................................................................................................................................ 30
4.2.2 - Liste des proprits d'un objet Property............................................................................................. 31
4.2.2.1 - Inherited...................................................................................................................................... 31
4.2.2.2 - Name...........................................................................................................................................32
4.2.2.3 - Type.............................................................................................................................................32
4.2.2.4 - Value........................................................................................................................................... 32
4.2.3 - Accder une proprit..................................................................................................................... 32
4.2.4 - Modifier la valeur d'une proprit....................................................................................................... 34
4.2.5 - Cration d'une nouvelle proprit....................................................................................................... 35
4.3 - L'objet TableDef........................................................................................................................................... 36
4.3.1 - Dfinitions............................................................................................................................................ 36
4.3.2 - Liste des proprits.............................................................................................................................36
4.3.2.1 - Attributes..................................................................................................................................... 36
4.3.2.2 - Connect....................................................................................................................................... 37
4.3.2.3 - DataCreated................................................................................................................................ 37
4.3.2.4 - Fields...........................................................................................................................................37
4.3.2.5 - Indexes........................................................................................................................................37
4.3.2.6 - LastUpdated................................................................................................................................ 37
4.3.2.7 - Name...........................................................................................................................................37
4.3.2.8 - Properties.................................................................................................................................... 38
4.3.2.9 - RecordCount............................................................................................................................... 38
4.3.2.10 - SourceTableName.....................................................................................................................38
4.3.2.11 - Updatable.................................................................................................................................. 38
4.3.2.12 - ValidationRule........................................................................................................................... 38
4.3.2.13 - ValidationText............................................................................................................................ 38
4.3.3 - Liste des mthodes............................................................................................................................. 39
4.3.3.1 - CreateField..................................................................................................................................39
4.3.3.2 - CreateIndex.................................................................................................................................39
4.3.3.3 - CreateProperty............................................................................................................................ 39
4.3.3.4 - OpenRecordset........................................................................................................................... 39
4.3.3.5 - RefreshLink................................................................................................................................. 39
4.3.4 - Oprations sur les tables d'une base de donnes............................................................................. 40
4.3.4.1 - Lister les tables d'une base de donnes....................................................................................40
4.3.4.2 - Renommer une table.................................................................................................................. 41
4.3.4.3 - Supprimer une table................................................................................................................... 41
4.3.4.4 - Crer une nouvelle table............................................................................................................ 42
-3-
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
5.6.7 - Connection...........................................................................................................................................86
5.6.8 - DataCreated........................................................................................................................................ 87
5.6.9 - EditMode..............................................................................................................................................87
5.6.10 - EOF................................................................................................................................................... 87
5.6.11 - Fields................................................................................................................................................. 88
5.6.12 - Filter...................................................................................................................................................88
5.6.13 - Index.................................................................................................................................................. 88
5.6.14 - LastModified...................................................................................................................................... 88
5.6.15 - LastUpdated...................................................................................................................................... 88
5.6.16 - LockEdits........................................................................................................................................... 89
5.6.17 - Name................................................................................................................................................. 89
5.6.18 - NoMatch............................................................................................................................................ 89
5.6.19 - PercentPosition..................................................................................................................................89
5.6.20 - Properties.......................................................................................................................................... 89
5.6.21 - RecordCount......................................................................................................................................90
5.6.22 - Restartable........................................................................................................................................ 90
5.6.23 - Sort.................................................................................................................................................... 90
5.6.24 - StillExecuting..................................................................................................................................... 91
5.6.25 - Transactions...................................................................................................................................... 91
5.6.26 - Type................................................................................................................................................... 92
5.6.27 - Updatable.......................................................................................................................................... 92
5.6.28 - UpdateOptions...................................................................................................................................92
5.6.29 - ValidationRule.................................................................................................................................... 92
5.6.30 - ValidationText.....................................................................................................................................92
5.7 - Liste des mthodes..................................................................................................................................... 93
5.7.1 - AddNew............................................................................................................................................... 93
5.7.2 - CancelUpdate...................................................................................................................................... 93
5.7.3 - Clone................................................................................................................................................... 93
5.7.4 - Close....................................................................................................................................................94
5.7.5 - CreateQueryDef...................................................................................................................................94
5.7.6 - Delete.................................................................................................................................................. 94
5.7.7 - Edit.......................................................................................................................................................94
5.7.8 - FindFirst, FindLast, FindNext, FindPrevious....................................................................................... 94
5.7.9 - GetRows.............................................................................................................................................. 95
5.7.10 - Move, MoveFirst, MoveLast, MoveNext, MovePrevious................................................................... 95
5.7.11 - OpenRecordset.................................................................................................................................. 95
5.7.12 - Requery............................................................................................................................................. 95
5.7.13 - Update............................................................................................................................................... 95
6 - Conclusion............................................................................................................................................................96
-6-
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Arabe
1.2 - Introduction
DAO (Data Access Objects) est une bibliothque regroupant un ensemble d'objets permettant d'accder une base
de donnes. L'utilisation de ces objets permet la fois de travailler la structure de la base mais aussi de manipuler
ses donnes.
Ce cours a pour objectif de vous enseigner les innombrables possibilits offertes par cette bibliothque, que ce soit
aussi bien au niveau de la structure que des donnes. Via plusieurs exemples, vous allez ainsi dcouvrir comment
il est possible de crer une table, modifier ses champs, dfinir des relations, construire des requtes, manipuler les
donnes d'un formulaire, ajouter de nouveaux enregistrements, ...
Vous pourrez aussi retrouver chacune des proprits et des mthodes propres chaque objet dans un listing en fin
de section. Bien entendu, cette liste ne prtend pas se substituer l'aide Access qui, je vous le rappelle, reste la
plus grande mine d'informations.
Certaines parties ne sont pas dtailles dans ce document car elles ne rpondent pas une
utilisation classique de DAO avec le moteur Jet. Afin d'alleger ce cours, vous ne trouverez donc
pas d'informations concernant :
Avant de commencer :
L'ensemble des mthodes et des objets permettant l'accs aux donnes via DAO sont regroups au sein d'une mme
librairie. Afin d'utiliser ces fonctionnalits, il vous faut donc ajouter la rfrence suivante votre projet :
Microsoft DA0 3.5 Object Library pour Access 97.
Microsoft DA0 3.6 Object Library pour les versions utltrieures.
Microsoft Office 12.0 (14.0) Access Database Engine Object pour travailler avec des bases de donnes Access
2007 ou Access 2010.
Comment ajouter une rfrence ?
Depuis le menu Outils de l'diteur Visual Basic, slectionnez l'option Rfrences. Cochez
ensuite la case correspondante la rfrence ajouter.
-7-
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Comme vous pouvez le remarquer, le modle objet DAO possde une structure hirarchise dont la racine est un
objet DBEngine. Les relations de descendance sont de type un plusieurs. Cela signifie que chaque objet parent
possde une collection de chaque type d'objet enfant dont le nom est normalis ainsi :
Nom de la collection = Type de l'objet enfant + "s"
Par exemple, l'objet DBEngine possde une collection d'objet Workspace. Cette collection est nomme
Workspaces.
Prcisons aussi que ce schma a t rduit uniquement la partie dfinition de donnes (en bleu) et la partie
manipulation de donnes (en vert). De plus, chaque branche a t rduite pour amliorer la lisibilit. Comme tout autre
objet, un objet DAO possde un ensemble de proprits (property). Celles ci sont regroupes dans une collection
nomme properties propre chaque objet. Voici un exemple du schma rel appliquer aux objets TableDef.
-8-
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Accs via la cl : Il s'agit d'utiliser le nom de l'lement lorsque celui-ci est connu.
Syntaxe :
MaCollection.Item ("MonItem")
La proprit Item est le membre par dfaut des objets de type Collection. Vous pouvez donc
utiliser indiffremment :
Syntaxe :
MaCollection.Item ("MonItem")
Ou :
Syntaxe :
MaCollection.("MonItem")
Etant donn que le premier lment a pour index 0, on en conclut aisment que le dernier
lment de la collection possde l'index : Count - 1
-9-
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La seconde mthode utilise une boucle For Each In Next pour parcourir un un les objets de la collection.
Ainsi :
Dim oWks As DAO.Workspace
For Each oWks In DBEngine.Workspaces
'Affiche le nom de l'objet
MsgBox oWks.Name
Next oWks
Cette dernire mthode possde un avantage dans le cas de collections htrognes. Imaginons une collection
d'objets O1 et O2. Pour parcourir uniquement les lments de type O1, nous aurions par exemple :
Dim oTmpObjet as TypeO1
For Each oTmpObjet In MaCollection
'Traitement effectuer
Next oTmpObjet
Notons tout de mme que pour tre ajout, l'objet doit tre instanci auparavant, sans quoi il sera impossible de
l'ajouter. De mme, il est impossible d'ajouter un objet si un autre objet prsent dans la collection possde le mme
nom. Vous trouverez de nombreux exemples de la mthode Append dans la suite de ce document.
- 10 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
- 11 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
3.1.2.1 - DefaultPassword
Type : String
Il s'agit du mot de passe par dfaut qui sera utilis lors de la cration d'un nouvel objet Workspace.
3.1.2.2 - DelfaultType
Type : Long
Cette proprit correspond au type par dfaut des futurs objets Workspace. Les valeurs possibles sont dbUseJet
dans le cas d'une utilisation Jet et dbUseODBC dans le cas d'une liaison ODBC direct. Notons que dans ce dernier
cas, l'objet Database est remplac par un objet de type Connection.
3.1.2.3 - DefaultUser
Type : String
Il s'agit du nom d'utilisateur qui sera utilis par dfaut lors de la cration d'un nouvel objet Workspace. Cette proprit
est gnralement utilise en mme temps que DefaultPassword.
3.1.2.4 - Errors
Type : Collection
Cette collection regroupe l'ensemble des erreurs leves par le moteur de base de donnes. Une erreur DAO est
identifie par un numro d'erreur et possde une description correspondant au message d'erreur. A chaque fois
qu'une opration DAO choue,un ou plusieurs objets Error sont crs et ajouts la collections Errors. Une fois
- 12 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
que tous ces objets sont crs, une erreur d'excution est leve par VBA. Cette erreur correspond l'objet Error
possdant le numro d'erreur le plus lev. Sous Access, lors d'une erreur DAO, un seul objet Error est cr pour
rprsenter l'erreur. L'erreur leve par VBA est donc la mme que celle du moteur de base de donnes. Toutefois, si
vous tentez par exemple de vous connecter une base de donnes Oracle via votre application, il se peut qu'Oracle
lve plusieurs objets Error reprnsentant la mme erreur. Vous trouverez donc dans la collection DBEngine.Errors :
Mais une seule erreur sera leve par VBA. Le parcours de la collection Errors peut donc vous permettre d'affiner
vos routines de gestion d'erreur.
3.1.2.5 - Inipath
Type : String
La proprit Inipath correspond au chemin du fichier d'initialisation du moteur de base de donnes. Il s'agit
gnralement d'une entre dans la base des registres :
HKLM\Software\microsoft\Office\10.0\Access\Jet\4.0
C'est ici que figure de nombreuses options internes au moteur Jet, comme par exemple le chemin du fichier de
groupe de travail utilis.
Bien qu'importante au moteur de base de donnes, cette proprit reprsente trs peu d'intrt
pour le dveloppeur hormis de localiser le chemin o est stock le fichier de groupe de travail.
3.1.2.7 - Properties
Type : Collection
Collection regroupant l'ensemble des proprits (Property) de l'objet DBEngine.
Pour plus d'informations sur la collection Properties, je vous renvoie vers la section 4.2 Les
proprits spcifiques.
3.1.2.8 - SystemDB
Type : String
Il s'agit du chemin d'accs au fichier mdw (fichier de groupe de travail) utiliser. Le fichier utilis par dfaut est celui
contenu dans l'entre du fichier ini ou de la base de registre spcifie dans la proprit IniPath.
3.1.2.9 - Version
Lecture seule.
Type : String
La proprit Version correspond la version du moteur Jet. Par exemple : 3.6.
3.1.2.10 - Workspaces
Type : Collection
- 13 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Collection regroupant l'ensemble des espaces de travail (Worspaces(0) tant l'espace de travail par dfaut).
Pour de plus amples informations, veuillez consulter le chapitre suivant : L'objet Workspace.
3.1.3.1 - BeginTrans
La mthode BeginTrans commence une transaction.
Exemple :
DBEngine.BeginTrans
3.1.3.2 - CommitTrans
La mthode CommitTrans stoppe la transaction tout en enregistrant les donnes.
Exemple :
DBEngine.CommitTrans
3.1.3.3 - CompactDatabase
La mthode CompactDatabase copie et compacte une base de donnes. Notons que la base de donnes doit tre
ferme pour raliser cette opration.
Syntaxe :
DBEngine.CompactDatabase olddb, newdb, [locale], [options], [password]
olddb correspond au fichier source et newdb au fichier de destination (diffrent de olddb). Les autres options
concernent essentiellement la langue, la version et le codage utilis. Il s'agit de constantes disponibles dans l'aide
Access.
Exemple :
DBEngine.CompactDatabase "c:\bd1.mdb", "c:\bd2.mdb"
3.1.3.4 - CreateDatabase
La mthode CreateDatabase permet de crer une nouvelle base de donnes. Elle renvoie un objet de type
DAO.Database.
Syntaxe :
- 14 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
3.1.3.5 - CreateWorkspace
Cette mthode permet de crer un nouvel objet WorkSpace (Espace de travail) et retourne l'objet cr.
Syntaxe :
Set workspace = DBEngine.CreateWorkspace(name, user, password, [type])
Name correspond au nom de l'espace de travail. Il permettra de l'identifier de manire unique dans la collection
Workspaces.
User correspond au nom de l'utilisateur dans cet espace et password son mot de passe (14 caractres au
maximum). Ce couple d'authentification doit obligatoirement figurer dans le fichier mdw spcifi dans la proprit
SystemDB, sans quoi une erreur sera leve par le moteur de base de donnes.
Le dernier argument est facultatif et correspond au type d'espace crer. S'il n'est pas mentionn, ce sera le type
figurant dans la proprit DefaultType qui sera utilis.
Exemple :
Set Wks = DBEngine.CreateWorkspace("MonEspace", "Toto", "mdp#@#!mJ")
3.1.3.6 - Idle
La mthode Idle donne la possibilit au moteur JET de traiter ses tches en attente. Notons que cette mthode
possde un argument facultatif. Si ce dernier est gal dbRefreshCache, la mmoire est ractualise avec
uniquement les donnes les plus rcentes en provenance du fichier de base de donnes.
Exemple :
DBEngine.Idle
3.1.3.7 - OpenDatabase
Comme son nom l'indique, cette mthode ouvre une base de donnes. Elle renvoie un objet de type DAO.Database.
Syntaxe :
Set database = workspace.OpenDatabase (dbname, options, read-only, connect)
- 15 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Dbname correspond au chemin d'accs de la base de donnes ouvrir. Cet argument peut aussi tre le nom d'une
source ODBC. Si cette chane est nulle, et que la variable connect est gale "ODBC;", une boite de dialogue de
slection de source de donnes est affiche.
L'argument option permet de spcifier si la base de donnes doit tre ouverte en mode exclusif (True) ou pas (False).
De plus l'argument read-only ouvre la base de donnes en lecture seule lorsqu'il est gal True.
Enfin, l'argument connect est utilis la fois pour spcifier le type de base de donnes et le mot de passe systme
utiliser pour ouvrir le fichier.
L'objet Database cr est ajout automatiquement l'espace de travail Workspaces(0).
Exemple :
Set db = DBEngine.OpenDatabase("c:\bd1.mdb", False, False, _
"MS Access;PWD=mdp#@#!e)
3.1.3.8 - RepairDatabase
La mthode RepairDatabase rpare la base de donnes. Notons qu'elle n'est plus utilise et
est rserve pour assurer la compatibilit avec les anciennes versions.
Il est recommand d'utiliser la mthode CompactDatabase en remplacement.
3.1.3.9 - Rollback
Cette mthode met fin une transaction dmarre avec BeginTrans.
Exemple :
DBEngine.RollBack
- 16 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Un objet Workspace reprsente un espace de travail au sein du moteur de base de donnes (DBEngine). Il
s'agit en fait d'une session du DBEngine ddie un utilisateur donn. Hormis le cas o vous voulez grer vousmme l'ouverture de la base de donnes dans un environnement scuris, l'utilisation de l'objet Workspace sous
Access a peu d'intrt. En effet, l'objet Workspaces(0) du DBEngine est l'espace de travail par dfaut. Il est
instanci automatiquement par Access lors d'un appel un objet DAO. Ainsi, en gnral, vous utiliserez une
rfrence implicite celui ci, notamment lorsque que vous utiliserez les mthodes CodeDB ou CurrentDB de l'objet
Access.Application.
Toutefois, tout comme l'objet DBEngine, le Workspace est capable d'excuter des mthodes de transaction, et
permet en plus de paramtrer la gestion des curseurs du moteur Jet (Recordset). Son utilisation peut devenir alors
primordiale lorsque l'on souhaite paramtrer d'avantage l'accs aux donnes.
Comme il a t prcis dans le chapitre prcdent, c'est partir de l'objet DBEngine qu'est cr chaque objet
Workspace l'aide de la mthode CreateWorkspace.
La mthode CreateWorkspace demande un identifiant unique pour l'objet cr. De plus, la
cration de tels objets est trs rare dans le temps. Aussi, il est possible d'utiliser une variable
qui contiendra la date de cration de l'objet comme nom de l'objet Workspace instancier.
Voici un exemple de cration d'un objet Workspace :
Dim oWks As DAO.Workspace
Set oWks = DBEngine.CreateWorkspace(Format(Now(), _
"yyyymmddhhnnss"), "Utilisateur1", "mpd##", dbUseJet)
3.2.2.1 - Databases
Type : Collection
Collection regroupant l'ensemble des objets Database ouverts dans l'objet Workspace correspondant.
3.2.2.2 - IsolateODBCTrans
Type : Boolean
Si cette proprit est gale False (valeur par dfaut), il est possible d'effectuer plusieurs transactions simultanes
sur la mme connexion ODBC. Toutefois, les bases de donnes SQL Server n'acceptent pas ce mode de
fonctionnement, aussi dans le cas de connexion ODBC avec ce type de base de base de donnes, il vous faudra
fixer cette proprit True.
3.2.2.3 - Name
Lecture seule.
Type : String
La proprit Name correspond au nom de l'objet Workspace concern. Ce nom est unique au sein de la collection
DBEngine.Workspaces.
- 17 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
3.2.2.4 - Properties
Comme tout autre objet DAO, l'objet Workspace possde cette collection qui regroupe l'ensemble des proprits
(Property) de cet objet.
De plus amples informations sur la collection Properties sont disponibles dans le chapitre Les
proprits spcifiques.
3.2.2.5 - Type
Lecture seule.
Type : Long
Il s'agit du type de l'espace de travail. Sa valeur est celle que vous avez spcifi la mthode CreateWorkspace du
DBEngine. Si vous n'avez pas mentionn cette valeur lors de la cration de l'espace de travail, il s'agit de la valeur de
la proprit DefaultType du moteur de base de donnes. L'objet Workspaces(0) tant instanci automatiquement
par Access lors d'un appel un objet DAO, la proprit Workspaces(0).Type est donc gale dbUseJet.
L'autre valeur disponible est dbUseODBC.
3.2.3.1 - BeginTrans
La mthode BeginTrans commence une transaction.
Exemple :
DBEngine.Workspaces(0).BeginTrans
3.2.3.2 - Close
La mthode Close ferme l'espace de travail correspondant. Notez que si vous fermez un objet Workspace, ses
transactions en attentes sont dtruite. De mme si cet objet Workspace possde des objets Database ou Connection,
ces objets sont aussi ferms, ce qui a pour effet de fermer leurs objets recordsets associs.
La fermeture d'un objet Workspace doit donc tre une action rflchie car elle peut entrainer
la perte irrmdiable de donnes.
Exemple :
DBEngine.Workspaces(0).BeginTrans
3.2.3.3 - CommitTrans
Cette mthode stoppe une transaction dmare avec BeginTrans tout en enregistrant les donnes.
- 18 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Exemple :
DBEngine.Workspaces(0).CommitTrans
3.2.3.4 - CreateDatabase
La mthode CreateDatabase permet de crer une nouvelle base de donnes. Elle renvoie un objet de type
DAO.Database.
Syntaxe :
Set database = Workspace.CreateDatabase (name, locale, [options])
3.2.3.5 - OpenDatabase
Comme son nom l'indique, la mthode OpenDatabase ouvre une base de donnes. Elle renvoie un objet de type
DAO.Database.
Syntaxe :
Set database = workspace.OpenDatabase (dbname, options, read-only, connect)
Dbname correspond au chemin d'accs de la base de donnes ouvrir. Cet argument peut aussi tre le nom d'une
source ODBC. Si cette chane est nulle, et que la variable connect vaut "ODBC;", une boite de dialogue de slection
de source de donnes est affiche.
L'argument option permet de spcifier si la base de donnes doit tre ouverte en mode exclusif (True) ou pas (False).
De plus l'argument read-only ouvre la base de donnes en lecture seule lorsqu'il vaut True.
Enfin, l'argument connect est utilis la fois pour spcifier le type de base de donnes et le mot de passe pour
ouvrir le fichier.
L'objet database cr est automatiquement ajout la collection Databases de l'objet
Workspace aprs sa cration.
Exemple :
Set db = DBEngine.Workspaces(0).OpenDatabase("c:\bd1.mdb", False, False, _
"MS Access;PWD=mdp#@#!e")
- 19 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
3.2.3.6 - Rollback
La mthode Rollback met fin une transaction dmarre avec BeginTrans.
Exemple :
DBEngine.Workspaces(0).RollBack
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
- 21 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La fonction OuvrirUnFichier est disponible dans la FAQ Access. Elle permet d'afficher une bote de dialogue de
slection de fichier.
La base de donnes ainsi ouverte est disponible via l'objet : VDB de la procdure du bouton Valider.
Cette interface permet la fois de s'authentifier au sein d'un fichier de groupe de travail et de saisir le mot de passe
systme pour l'ouverture de l'objet Database.
Le choix du fichier de groupe de travail se ralise ici :
Set oDbe = New DBEngine
oDbe.SystemDB = strFichierMDW
Set VWK = oDbe.CreateWorkspace(Format(Now(), _
"yyyymmddhhnnss"), TUtilisateur, TMDP, dbUseJet)
La premire ligne permet d'instancier le nouveau moteur de base de donnes auquel nous spcifions ensuite le
fichier mdw ouvrir. Puis nous crons enfin le l'espace de travail l'aide de la mthode CreateWorkspace.
Une des raisons majeures pour lesquelles la cration de l'espace de travail lve une erreur est que le couple utilisateur
- mot de passe est invalide dans le fichier mdw slectionn. Il se peut aussi que l'affectation de la proprit SystemDB
ait choue, ce qui signifie que le code de votre projet utilise des mthodes DAO avant ce bloc d'instructions. Un
moyen simple de le vrifier :
MsgBox oDbe.SystemDB
oDbe.SystemDB = FichierMDW
MsgBox oDbe.SystemDB
Si les deux MsgBox affichent le mme rsultat, cela indique que votre code utilise des instructions DAO avant cette
procdure.
3.3.1 - Gnralits
Comme vous avez pu le remarquer dans la fentre de base de donnes de l'application Access, un fichier mdb peut
tre dcompos en deux parties :
- La partie applicative. Elle regroupe la fois les formulaires, les tats, les modules et les macros.
- 22 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
- La partie donnes. Cette partie se retrouve dans l'ensemble des SGBD (Systme de Gestion de Base de Donnes). Il
s'agit des tables et des requtes. Access tant un SGBDR (SGBD Relationnel), cette partie regroupe aussi l'ensemble
des relations entre les diffrentes tables.
Le modle objet DAO donne accs la partie donnes via son objet Database. Cet objet est la racine du DDL
(Langage de dfinition de donnes) et du DML (Langage de manipulation de donnes) sous DAO. C'est partir de
ce mme objet Database que l'on va crer les tables, les requtes, les relations et manipuler les donnes (Insert,
Update, Delete).
Comme il a t crit plus haut, un objet database peut tre instanci depuis un moteur de base de donnes
(DBEngine) ou depuis un espace de travail (Workspace) l'aide des mthodes CreateDatabase et OpenDatabase.
Ceci peut tre fait de manire explicite :
Dim oDb As DAO.Database
Set oDb=DBEngine.CreateDatabase ()
Ou de manire implicite :
Dim oDb As DAO.Database
Set oDb=CreateDatabase()
Toutefois, dans la majorit des cas, vous souhaitez utiliser la base de donnes courante ouverte dans Access. Il vous
suffit alors d'utiliser les mthodes Application.CurrentDb ou Application.CodeDb.
En effet, ce code fait un double appel Currentdb ce qui provoque une double instanciation de la base de donnes
courante.
Dim
Dim
Set
Set
Set
- 23 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Signification
Gnral (Franais, anglais ...)
Arabe
Chinois simplifi
Chinois traditionnel
Russe
Tchque
Nerlandais
Grec
Hbreu
Hongrois
Islandais
Japonais
Coren
Neutre
Norvgien et danois
Paradox International
Paradox norvgien ou danois
Paradox sudois ou finnois
Polonais
Slovne
Espagnol
Sudois ou finnois
Tha
Turc
Indfini
- 24 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
3.3.2.2 - Connect
Lecture Seule.
Type : String
La proprit Connect reprsente la chane de connexion utilise l'ouverture de l'objet Database. Lorsque que vous
utilisez cette proprit sur une base au format Access, cette proprit est gale "".
3.3.2.3 - Containers
Type : Collection
Cette collection regroupe l'ensemble des objets de type container contenu dans la base de donnes. Il s'agit de
l'ensemble des objets enregistrs dans la base de donnes. Vous y touverez par exemple des informations sur les
formulaires, les tats ...
Cette proprit vous est founie titre d'information, en effet, un tutoriel entier pourrait lui tre
consacr.
3.3.2.4 - Name
Lecture Seule.
Type : String
La proprit Name d'un objet Database retourne le nom de la base de donnes. Pour une base de donnes Access,
il s'agit du nom du fichier mdb ainsi que le chemin d'accs complet vers ce fichier.
3.3.2.5 - Properties
Type : Collection
Collection regroupant l'ensemble des objets Property de l'objet Database.
3.3.2.6 - QueryDefs
Type : Collection
Cette collection regroupe l'ensemble des requtes enregistres dans la base de donnes.
Cette partie sera largement dtaille dans la section 4.7 L'objet QueryDef.
3.3.2.7 - RecordsAffected
Lecture Seule.
Type : Long
- 25 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La proprit RecordsAffected retourne le nombre d'enregistrements qui ont t affects par le dernier ordre SQL
de la mthode Execute. Cela permet de connaitre, par exemple, le nombre de lignes supprimes lors d'une requte
Delete.
Exemple d'utilisation :
Dim Requete As String
Dim DB As DAO.Database
Requete = "DELETE FROM MaTable WHERE ChampID>20"
Set DB = CurrentDb
DB.Execute Requete
MsgBox DB.RecordsAffected
3.3.2.8 - Recordsets
Lecture Seule.
Type : Collection
Cette collection regroupe l'ensemble des objets recordset ouverts dans la base de donnes.
Cette partie sera largement dtaille dans le chapitre 5 Accs aux donnes.
3.3.2.9 - Relations
Type : Collection
La proprit Relations est une collection regroupant l'ensemble des relations prsentes dans la base de donnes.
Cette collection n'est utile que pour les SGBDR.
Cette partie sera largement dtaille dans la section 4.6 L'objet Relation.
3.3.2.10 - TableDefs
Type : Collection
Cette collection regroupe l'ensemble des tables enregistres dans la base de donnes. Dans le cas d'une base de
donnes incluant des tables lies, il existe aussi un objet TableDef pour chaque table attache.
Cette partie sera largement dtaille dans la section : 4.3 L'objet TableDef.
3.3.2.11 - Transactions
Lecture Seule.
Type : Boolean
La proprit Transactions d'un objet Database indique si l'objet database supporte les transactions. Si oui, la valeur
de la proprit est gale True.
- 26 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Dans le cas d'une base de donnes Access, cette valeur est fixe True et les transactions sont disponibles via
les objets Recordset Dynaset et Table.
3.3.2.12 - Updatable
Lecture Seule.
Type : Boolean
Si cette proprit est gale False, la base de donnes est protge en criture et vous ne pouvez modifier ni les
donnes, ni la structure.
3.3.2.13 - Version
Lecture Seule.
Type : String
Cette proprit retourne la version du moteur Jet utilis pour crer la base de donnes. Dans le cas, d'une base de
donnes Access au format 2000 ou ultrieur, cette proprit est gale 4.0.
3.3.3.2 - CreateProperty
La mthode CreateProperty cre et retourne un objet Property.
Syntaxe :
Set property = object.CreateProperty (name, type, value, DDL)
Nous reviendrons plus en dtails sur les objets property dans le chapitre suivant.
3.3.3.3 - CreateQueryDef
La mthode CreateQueryDef cre une nouvelle requte et retourne l'objet QueryDef correspondant. L'objet cr est
automatiquement ajout la collection Database.QueryDefs.
Syntaxe :
Set querydef = Database.CreateQueryDef (name, sqltext)
- 27 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
L'argument name correspond au nom de la requte crer. Celui ci doit tre unique au sein de la collection
QueryDefs. En affectant une chaine vide ("") ce paramtre, vous crez un objet QueryDef temporaire qui ne sera
pas ajout la collection QueryDefs. Dans ce cas, l'objet sera dtruit la fin de la procdure.
L'argument SQL est une chane de caractres contenant l'instruction SQL de la requte crer. Il peut s'agir de
requte de slection, de mise jour, de supression, etc ...
Le fonctionnement de l'objet QueryDef est illustr dans le chapitre intitul : L'objet QueryDef
3.3.3.4 - CreateRelation
La mthode CreateRelation cre et retourne un objet Relation.
Syntaxe :
Set relation = database.CreateRelation (name, table, foreigntable, attributes)
Nous reviendrons plus en dtails sur les objets Relation dans le chapitre suivant.
3.3.3.5 - CreateTableDef
La mthode CreateTableDef cre et retourne un objet Tabledef. A ce stade, l'objet est seulement cr et n'est pas
encore intgr la base de donnes. Pour l'ajouter aux autres tables, vous devrez invoquer la mthode Append
de la collection TableDefs.
Syntaxe :
Set tabledef = database.CreateTableDef (name, attributes, source, connect)
La cration de table sera aborde en dtails dans le chapitre suivant la section 4.3 L'objet
TableDef
3.3.3.6 - Execute
Cette mthode execute un ordre SQL. Cette ordre SQL doit tre une requte action (Insert, Update, Delete). Les
requtes de slection sont dlgues aux objets Recordset. Une fois l'ordre SQL excut, il est possible de connaitre
le nombre d'enregistrements qui ont t affects par cet ordre grce la proprit RecordsAffected.
Exemple :
Dim Db as DAO.Database
Set Db=CurrentDb
Db.Execute ("DELETE FROM MaTable")
3.3.3.7 - NewPassword
La mthode NewPassword permet de modifier le mot de passe systme de la base de donnes.
- 28 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Ne pas confondre le mot de passe systme et le mot de passe utilisateur utilis dans un groupe
de travail. Le mot de passe systme est celui dfinit dans le menu Outils/Scurit/Dfinir le mot
de passe de la base de donnes.
Exemple :
Dim Db as DAO.Database
Set Db=CurrentDb
Db.NewPassword "mdpancien","mdpnouveau"
3.3.3.8 - OpenRecordset
La mthode OpenRecordset ouvre et retourne un objet Recordset (Curseur) permettant d'accder aux donnes.
L'objet ainsi cr est automatiquement ajout la collection Recordsets.
Vous retrouverez cette mthode dans le chapitre 5 Accs aux donnes.
- 29 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.2.1 - Dfinitions
DAO est un modle objet. Aussi chaque objet qui le compose possde une liste de proprits dont chacune d'elles
correspond un objet Property. Vous vous demandez alors quel est l'intrt de la collection Properties puisque ces
proprits sont disponibles sous VBA avec la syntaxe : Objet.Proprit. Certes Visual Basic liste certaines proprits
mais il ne les propose pas toutes. Ainsi par exemple, les objets TableDef possdent une proprit Description qui
correspond la description de la table. Cette proprit n'est pas liste dans le rcapitulatif des proprits des objets
TableDef, le seul moyen de l'atteindre est d'utiliser la collection TableDef.Properties.
- 30 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
De plus vous pouvez crer vos propres proprits et les ajouter la collection Properties de l'objet de votre choix.
Il devient donc impossible de raliser une liste exhaustive de l'ensemble des proprits d'un objet DAO.
4.2.2.1 - Inherited
Lecture seule.
Lorsque cette proprit est gale True, cela signifie que la proprit ne fait pas partie de l'objet mme mais qu'elle
est hrite d'un autre objet.
Imaginons un objet QueryDef Q1 auquel nous ajoutons une proprit personalise P1. P1 a t cre pour Q1 donc,
la proprit P1.Inherited est gale False. Si par la suite nous ouvrons un recordset R1 sur Q1, la proprit P1 se
retrouvera dans la collection Properties de R1. P1 sera alors hrite et P1.Inherited sera gale True.
Dans ce cas, ces deux expressions seront vrifies :
Q1.Properties("P1").Inherited=False
Et :
R1.Properties("P1").Inherited=True
- 31 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.2.2.2 - Name
Cette proprit correspond au nom de la proprit. Celui-ci doit tre unique au sein de la collection Properties
de l'objet concern, sans quoi une erreur sera leve lorsque vous tenterez d'ajouter le nouvel objet Property la
collection Properties.
Utilisez des noms prcis et en relation avec ce que la proprit modlise. De mme viter
d'utiliser des mots rservs par Visual Basic. Ainsi, si la proprit reprsente une date de
vrification, nommez la DateVerification et non pas simplement Date.
4.2.2.3 - Type
Il s'agit du type de la proprit. Sa valeur doit tre une des constantes suivantes :
dbBigInt
dbBinary
Constante
16
9
dbBoolean
dbByte
dbChar
1
2
18
dbCurrency
dbDate
dbDecimal
dbDouble
dbFloat
dbGUID
dbInteger
dbLong
dbLongBinary
5
8
20
7
21
15
3
4
11
dbMemo
dbNumeric
dbSingle
dbText
dbTime
dbTimeStamp
dbVarBinary
12
19
6
10
22
23
17
Valeur
Type
Numrique (haute prcision)
Binaire de longueur fixe (255
octets maxi)
Boolen
Octet
Chane de caractre de
longueur fixe
Montaire
Date/Heure
Dcimal
Double
Rel virgule flottante
Identifiant GUID
Entier
Entier long
Binaire longueur variable.
(OLE)
Mmo
Numrique
Rel Simple
Texte longueur fixe
Heure
TimeStamp
Binaire longueur variable
(255 octets maxi)
4.2.2.4 - Value
Cette proprit correspond la valeur de l'objet Property. Cette valeur doit tre compatible avec le type spcifi
dans la proprit Type.
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Tabledef, celle-ci n'existe que si elle a t initialise auparavant. Ds lors, nous devons vrifier l'existence de la
proprit avant d'y accder.
Deux mthodes peuvent alors tre utilises. La premire consiste parcourir chacun des objets Property de la
collection est de retourner un boolen si l'lment a t trouv.
Public Function ExistProperty(ColTProperties As DAO.Properties, _
strTNom As String) As Boolean
Dim oTmpPrp As DAO.Property
For Each oTmpPrp In ColTProperties
If oTmpPrp.Name = strTNom Then
ExistProperty = True
Exit For
End If
Next oTmpPrp
End Function
Exemple d'utilisation :
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
Set oTbl = oDb.TableDefs("Commande")
MsgBox ExistProperty(oTbl.Properties, "description")
La seconde mthode consiste tenter d'accder la proprit via son nom et de traiter l'erreur si celle-ci n'existe pas.
Public Function ExistProperty(ColTProperties As DAO.Properties, _
strTNom As String) As Boolean
On Error GoTo err
Dim oTmpPrp As DAO.Property
Set oTmpPrp = ColTProperties(strTNom)
ExistProperty = True
err:
End Function
L'utilisation de la fonction reste la mme que celle de la prcdente. Toutefois, la seconde mthode est plus rapide
du fait qu'elle n'utilise pas de boucle.
Dans le cas o vous n'utiliseriez pas une de ses fonctions et que la proprit n'est pas trouve dans la collection
Properties, l'erreur d'excution 3270 (Proprit non trouve) sera leve.
Une fois la proprit trouve, il est possible de connatre sa valeur l'aide de la proprit value.
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
Set oTbl = oDb.TableDefs("Commande")
If ExistProperty(oTbl.Properties, "description") Then
MsgBox oTbl.Properties("description").Value
Else
MsgBox "Cette proprit n'existe pas"
End If
oDb.Close
Set oDb=Nothing
Set oTbl=Nothing
- 33 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Utilisation :
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
Set oTbl = oDb.TableDefs("Commande")
ModifProperty oTbl.Properties, "description", "essai"
- 34 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La mthode CreateProperty renvoyant un objet de type Property, ce code peut tre simplifi par :
Sub ajout()
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
Set oTbl = Db.TableDefs("Commande")
'Vrifie que la proprit n'existe pas
If Not ExistProperty(oTbl.Properties, "Test") Then
'Cre et ajoute la nouvelle proprit
oTbl.Properties.Append oTbl.CreateProperty("test", dbInteger, 0)
'Rafrachit la liste des proprits
oTbl.Properties.Refresh
End If
'Libration des objets
oDb.Close
Set oTbl=Nothing
Set oDb=Nothing
MsgBox "Proprit ajoute"
End Sub
De mme, plutt que de tester l'existence de la proprit, il est possible de tenter de l'ajouter et de grer l'erreur si
une autre proprit portant le mme nom existe dj.
- 35 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Sub ajout()
On Error GoTo err
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
Set oTbl = oDb.TableDefs("Commande")
'Cre et ajoute la nouvelle proprit
oTbl.Properties.Append oTbl.CreateProperty("test", dbText, 0)
'Rafrachit la liste des proprits
oTbl.Properties.Refresh
MsgBox "Proprit ajoute"
Exit Sub
'Gre les erreurs
err:
Select Case err.Number
Case 3367: MsgBox "La proprit existe dj"
Case Else: MsgBox "Une erreur inconnue est survenue"
End Select
End Sub
4.3.1 - Dfinitions
La collection TableDefs de l'objet Database regroupe l'ensemble des tables de la base de donnes. Cette collection
inclue aussi les tables systmes et les tables lies. Chaque objet TableDef qui la compose possde une collection
d'objets Field (Champ) et une autre d'objets Index. Ces deux autres types d'objet seront tudis plus loin dans ce
chapitre.
Tout comme c'est le cas en mode cration dans l'application Access, il est impossible de modifier
la structure d'une table lie en utilisant DAO.
4.3.2.1 - Attributes
Type : Long
La proprit Attributes caractrise la table correspondante. Il s'agit d'une (ou une combinaison) des constantes
suivantes :
Constante
dbAttachExclusive
dbAttachSavePWD
Signification
Utilisable uniquement sur une table lie.
Cette valeur indique que la table lie est
ouverte en mode exclusif.
Utilisable uniquement sur une table lie.
Avec cette constante, les informations
- 36 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
dbSystemObject
dbHiddenObject
dbAttachedTable
dbAttachedODBC
4.3.2.2 - Connect
Type : String
Il s'agit de la chane de connexion utilise pour une table lie. Sa valeur est nulle pour une table non lie. Cette chaine
de connexion prend en compte plusieurs paramtres comme par exemple le nom de l'utilisateur, son mot de passe,
etc ... Vous pouvez la consulter visualisant les proprits de votre table en mode cration.
Cette proprit est en lecture seule pour les objets TableDef prsents dans la collection
Database.TableDefs
4.3.2.3 - DataCreated
Lecture seule.
Type : Date
La proprit DataCreated renvoie la date de cration de la table.
4.3.2.4 - Fields
Type : Collection
Cette collection regroupe l'ensemble des champs de la table. Vous pouvez les modifier, en ajouter et en supprimer.
4.3.2.5 - Indexes
Type : Collection
Collection regroupant l'ensemble des index de la table. Vous pouvez les modifier, en ajouter et en supprimer.
4.3.2.6 - LastUpdated
Lecture seule.
Type : Date
La proprit LastUpdated retourne la date et l'heure de la dernire modification apporte la structure de la table
concerne.
4.3.2.7 - Name
Type : String
- 37 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La prorpit Name correspond au nom de la table. Ce nom doit tre unique au sein de la collection TableDefs de
l'objet Database.
Vous trouverez plus loin dans ce chapitre (section 4.3.4.2) un exemple montrant comment renommer une table dans
une base de donnes.
4.3.2.8 - Properties
Type : Collection
La prorpit Properties est une collection qui regroupe l'ensemble des objets Property de l'objet TableDef.
4.3.2.9 - RecordCount
Lecture seule.
Type : Long
La proprit RecordCount renvoie le nombre d'enregistrements de la table.
4.3.2.10 - SourceTableName
Type : String
Il s'agit du nom d'origine de la table lie. Si l'objet TableDef n'est pas une table lie, cette proprit est en lecture
seule et sa valeur est gale "".
4.3.2.11 - Updatable
Lecture seule.
Type : Boolean
La proprit de Updatable dfinit si les donnes provenant de la table peuvent tre modifies.
4.3.2.12 - ValidationRule
Type : String
La proprit ValidationRule dfinit la rgle de validation qui sera utilise pour valider les donnes lors d'une mise
jour (Insert compris).
Ainsi, pour obliger l'utilisateur a remplir le champ MonChamp lorsque que le champ Booleen MaCase est coch,
nous aurions la rgle suivante :
([MonChamp] IS NOT NULL AND [MaCase]) OR NOT ([MaCase])
4.3.2.13 - ValidationText
Type : String
- 38 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La proprit ValidationText correspond au message qui sera affich lors d'une mise jour si les donnes ne vrifient
pas la rgle spcifie dans ValidationRule.
Cette mthode sera traite plus en dtail dans la sous partie ddie aux objets Field.
4.3.3.2 - CreateIndex
La mthode CreateIndex cre un nouvel Index dans la table. Cet Index devra ensuite tre ajout la collection
Indexes de l'objet TableDef pour prendre effet.
Syntaxe :
Set index = tabledef.CreateIndex (name)
4.3.3.3 - CreateProperty
La mthode CreateProperty cre et retourne un nouvel objet Property qu'il vous faudra ensuite ajouter la collection
Properties de l'objet TableDef.
La syntaxe de la mthode est celle illustre dans la partie : Les proprits spcifiques.
4.3.3.4 - OpenRecordset
La mthode OpenRecordset ouvre un recordset contenant l'ensemble des enregistrements de la table.
Syntaxe :
Set recordset = object.OpenRecordset (type, options, lockedits)
4.3.3.5 - RefreshLink
La mthode RefreshLink n'est utilisable que sur des tables lies. Elle permet, aprs avoir modifi la proprit
Connect, de rafrachir les informations de connexion entre la table attache et la source de donnes.
Syntaxe :
- 39 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
tabledef.RefreshLink
Pour lister, l'ensemble des tables systmes, il suffit donc de parcourir un un les lments de la collection TableDefs
et de de vrifier si l'expression boolene est vraie ou non.
Sub Lister()
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
'Pour chaque table
For Each oTbl In oDb.TableDefs
'Si la table est systme alors afficher son nom
If oTbl.Attributes And dbSystemObject Then MsgBox oTbl.Name
Next oTbl
End Sub
Pour runir les deux listes, il suffit d'utiliser l'oprateur logique OR (Ou). Ainsi, le code suivant affichera les tables
systmes ainsi que les tables lies.
Sub Lister()
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
'Pour chaque table
For Each oTbl In oDb.TableDefs
'Si la table est lie ou systme alors afficher son nom
If oTbl.Attributes And (dbAttachedTable Or dbSystemObject) Then MsgBox oTbl.Name
Next oTbl
End Sub
- 40 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Sub Lister()
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
'Pour chaque table
For Each oTbl In oDb.TableDefs
'Si la table est lie et systme alors afficher son nom
If oTbl.Attributes And (dbAttachedTable And dbSystemObject) Then MsgBox oTbl.Name
Next oTbl
End Sub
En effet ce dernier liste les tables qui sont la fois systmes et lies.
Utilisation :
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
If RenommerTable(oDb, "Commande", "Commande_Archive") Then
MsgBox "Table renomme avec succs"
End if
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Utilisation :
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Set oDb = CurrentDb
If SupprimerTable(oDb, "Commande") Then
MsgBox "Table supprime"
End If
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.4.1 - Dfinition
Un objet Field reprsente un champ d'une table ou d'une requte dans une base de donnes. DAO offre de
nombreuses possibilits concernant les objets Field. Il est ainsi possible de crer des champs, d'en supprimer et
de les modifier aussi simplement que vous le feriez dans le mode cration d'Access. En effet, il existe une relle
analogie entre la liste des proprits des objets Field et la fentre de modification de la structure d'une table. Chaque
zone de texte de cette fentre correspond une proprit de l'objet Field.
Je vous propose tout d'abord d'effectuer un tour d'horizon de l'ensemble des proprits et des mthodes de cet objet,
avant de revenir sur des exemples plus spcifiques.
- 43 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Certaines de ces proprits ne sont disponibles en criture uniquement pour les objets qui n'ont
pas encore t ajouts la collections TableDef.Fields.
4.4.2.1 - AllowZeroLength
Type : Boolean
La proprit AllowZeroLength indique si un champ texte accepte les chaines vides. Si la valeur de cette proprit
est gale True, ces valeurs sont acceptes. Dans le cas chant, une erreur sera leve lorsque que vous tenterez
de mettre jour les donnes.
4.4.2.2 - Attributes
Type : Long
La proprit Attributes dfinit les options du champ. Il s'agit d'une une (ou une combinaison) des constantes
suivantes :
dbAutoIncrField
Constante
dbDescending
dbFixedField
dbHyperlinkField
dbSystemField
dbUpdatableField
dbVariableField
Signification
Correspond un champ de type Numro
Auto. A n'utiliser que sur les champs de type
numrique.
Dans le cas o le champ fait parti d'un index,
cette valeur permet d'inverser l'ordre de tri.
Champ de taille fixe. Valeur par dfaut des
champs de type numrique.
Gre les liens hypertext dans un champs
mmo.
Le champ stocke des informations de
duplication pour les duplicatas.
Un tel champ ne peut tre supprim.
Le valeur du champ peut tre modifie.
Le champ peut tre modifi. A n'utiliser que
sur les champs de type texte.
4.4.2.3 - CollatingOrder
Type : Long
Il s'agit de la mthode utilise par le moteur pour comparer les valeurs du champ si celui-ci est de type texte.
Les valeurs possibles sont :
- 44 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Constante
dbSortGeneral
dbSortArabic
dbSortChineseSimplified
dbSortChineseTraditional
dbSortCyrillic
dbSortCzech
dbSortDutch
dbSortGreek
dbSortHebrew
dbSortHungarian
dbSortIcelandic
dbSortJapanese
dbSortKorean
dbSortNeutral
dbSortNorwDan
dbSortPDXIntl
dbSortPDXNor
dbSortPDXSwe
dbSortPolish
dbSortSlovenian
dbSortSpanish
dbSortSwedFin
dbSortThai
dbSortTurkish
dbSortUndefined
Signification
Gnral (Franais, anglais ...)
Arabe
Chinois simplifi
Chinois traditionnel
Russe
Tchque
Nerlandais
Grec
Hbreu
Hongrois
Islandais
Japonais
Coren
Neutre
Norvgien et danois
Paradox International
Paradox norvgien ou danois
Paradox sudois ou finnois
Polonais
Slovne
Espagnol
Sudois ou finnois
Tha
Turc
Indfini
4.4.2.4 - DataUpdatable
Lecture seule.
Type : Boolean
Lorsque la proprit DataUpdatable est gale False, il vous est impossible de modifier les valeurs de ce champ.
C'est notamment le cas d'un champ auto-incrment.
4.4.2.5 - DefaultValue
Type : Variant
Cette proprit correspond la valeur par dfaut du champ. Elle est en lecture/criture pour les champs issus de
TableDef et en lecture seule pour ceux issus de QueryDef et Recordset. Elle n'est pas prise en charge par les objets
Fields des collections Database.Indexes et Database.Relations.
Pour un champ de type Long vous pouvez attribuer cette proprit la valeur : GenUniqueID().
Ainsi chaque nouvel enregistrement ajout, le moteur Jet attribue une valeur unique et
alatoire au nouvel enregistrement. Cette valeur reproduit le comportement d'une numrotation
automatique alatoire.
4.4.2.6 - FieldSize
Lecture seule.
- 45 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Type : Long
La proprit FieldSize, correspond la taille utilise dans la base par un champ de type binaire ou mmo.
Cette valeur est exprime en nombre de caractres pour un champ mmo et en nombre d'octet pour un champ de
type binaire.
4.4.2.7 - ForeignName
Type : String
La proprit ForeignName n'est utiliser que pour les champs d'un objet de type Relation. Elle dfinit le nom du
champ dans la table externe de la relation (cl trangre). Cette proprit est en lecture/criture dans le cas d'objets
Relation non ajouts la collection Database.Relations et en lecture seule pour les objets dj prsents au sein
de cette mme collection.
4.4.2.8 - Name
Type : String
Il s'agit du nom du champ. Le nom d'un champ doit tre unique au sein d'une table.
4.4.2.9 - OrdinalPosition
Type : Integer
La proprit OrdinalPosition permet de dfinir la position du champ dans la collection Fields de l'objet TableDef. Le
premier lment possde la position 0. Cette position conditionne l'ordre d'apparition des champs dans une requte
SELECT * FROM ... Notons que si deux champs possdent la mme valeur pour la proprit OrdinalPosition, ces
champs sont alors classs par ordre alphabtique.
Cette proprit est en lecture seule pour les objets QueryDef.
4.4.2.10 - Properties
Type : Collection
Collection regroupant l'ensemble des objets Property de l'objet Field.
4.4.2.11 - Required
Type : Boolean
La proprit Required indique si le champs accepte les valeurs nulles. Si cette proprit est gale True, une erreur
sera leve si vous tentez d'affecter une valeur nulle ce champ.
4.4.2.12 - Size
Type : Integer
La proprit Size dfinit la taille du champ comme vous pouvez le faire en mode cration. Cette proprit n'est en
lecture criture que pour les objets Field qui n'ont pas encore t ajouts la collection Fields.
- 46 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.4.2.13 - SourceField
Lecture seule.
Type : String
Cette proprit en lecture seule indique dans un objet QueryDef le nom d'un champ et non son alias. Soit une requte
nomme R01 :
SELECT NomClient as LeNom FROM Client
Nous pouvons donc crire la fonction suivante qui retourne le nom d'un champ en fonction de son alias :
Function NomChamp(oBaseDeDonnee As DAO.Database, strRequete As String, strAlias As String) As String
On Error GoTo err
Dim Qdf As DAO.QueryDef
Set Qdf = oBaseDeDonnee.QueryDefs(strRequete)
NomChamp = Qdf.Fields(strAlias).SourceField
Exit Function
'Gre les erreurs
err:
Select Case err.Number
Case 3265
'Si qdf est vide alors la requete n'existe pas
If Qdf Is Nothing Then
MsgBox "Impossible de trouver la requte " & strRequete
Else
MsgBox "Impossible de trouver le champ " & strAlias & " dans la requete " & _
strRequete
End If
Case Else: MsgBox "Une erreur inattendue est survenue"
End Select
End Function
Utilisation :
Dim oDb As DAO.Database
Set oDb = CurrentDb
MsgBox NomChamp(oDb, "R01", "LeClient")
- 47 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.4.2.14 - SourceTable
Lecture seule.
Type : String
Cette proprit repose sur le mme principe que la prcdente. Elle permet de savoir de quelle table provient un
champ d'une requte.
Ainsi, avec l'exemple prcdent, voici comment connatre la table d'origine du champ LeClient :
Dim oDb As DAO.Database
Dim oQR As DAO.QueryDef
Set oDb = CurrentDb
Set oQR = oDb.QueryDefs("R01")
MsgBox oQR.Fields(0).SourceTable
4.4.2.15 - Type
Type : Integer
Cette proprit dfinit le type du champ. Il s'agit d'une des constantes suivantes :
dbBigInt
dbBinary
Constante
16
9
dbBoolean
dbByte
dbChar
1
2
18
dbCurrency
dbDate
dbDecimal
dbDouble
dbFloat
dbGUID
dbInteger
dbLong
dbLongBinary
5
8
20
7
21
15
3
4
11
dbMemo
dbNumeric
dbSingle
dbText
dbTime
dbTimeStamp
dbVarBinary
12
19
6
10
22
23
17
Valeur
Type
Numrique (haute prcision)
Binaire de longueur fixe (255
octets maxi)
Boolen
Octet
Chane de caractre de
longueur fixe
Montaire
Date/Heure
Dcimal
Double
Rel virgule flottante
Identifiant GUID
Entier
Entier long
Binaire longueur variable.
(OLE)
Mmo
Numrique
Rel Simple
Texte longueur fixe
Heure
TimeStamp
Binaire longueur variable
(255 octets maxi)
- 48 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.4.2.16 - ValidationRule
Type : String
La proprit ValidationRule dfinit la rgle de validation qui sera utilise pour valider les donnes lors d'une mise
jour (Insert compris).
4.4.2.17 - ValidationText
Type : String
La proprit ValidationText correspond au message qui sera affich lors d'une mise jour si les donnes ne vrifient
pas la rgle spcifie dans ValidationRule.
4.4.2.18 - Value
Type : Variant
Pour un objet Recordset, la proprit Value retourne la valeur du champ pour l'enregistrement courant.
4.4.2.19 - VisibleValue
Type : Variant
Cette proprit est utilisable uniquement dans un environnement ODBCDirect. Elle renvoit la valeur actuelle
d'un champ lors d'un traitement par lot. Cette valeur est donc plus rcente que celle retourne par la proprit
OriginalValue
4.4.3.2 - CreateProperty
La mthode CreateProperty cre et retourne un nouvel objet Property qu'il vous faudra ensuite ajouter la collection
Properties de l'objet Field.
La syntaxe de la mthode est celle illustre dans la partie : Les proprits spcifiques.
- 49 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.4.3.3 - GetChunk
La mthode GetChunk s'applique aux champs des objets Recordset. Elle renvoie le contenu (ou une partie) d'un
champ mmo ou binaire dans une variable de type String.
Syntaxe :
Set variable = field.GetChunk (offset, numbytes)
Le paramtre offset de type Long correspond la position du caractre (ou de l'octet) partir duquel doit commencer
la lecture.
L'argument numbytes dtermine le nombre de caractres (ou d'octet) lire.
Utilisation :
- 50 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
L'erreur 3303 est difficile maitriser car mme si l'erreur est leve, le champ est quand mme supprim. Toutefois
les relations sont toujours prsentes et si vous rajoutez par la suite le champ supprim, la relation va "renatre", ce
qui provoque un comportement inattendu.
Il nous faut donc savoir si le champ est l'objet de relations.
Private Function ChampDansRelation(oBaseDeDonnees As DAO.Database, _
strNomTable As String, strNomChamp As String) As Integer
On Error GoTo err
Dim bolUtilise As Boolean
Dim oRlt As DAO.Relation
Dim oFld As DAO.Field
'Parcours les relations
For Each oRlt In oBaseDeDonnees.Relations
bolUtilise = False
If oRlt.Table = strNomTable Then
'Pour chaque champ, contrle le nom du champ
For Each oFld In oRlt.Fields
If oFld.Name = strNomChamp Then bolUtilise = True
Next oFld
ElseIf oRlt.ForeignTable = strNomTable Then
'pour chaque champ, contrle le nom tranger
For Each oFld In oRlt.Fields
If oFld.ForeignName = strNomChamp Then bolUtilise = True
Next oFld
End If
'Si la relation utilise le champ, on incremente le resultat
If bolUtilise Then ChampDansRelation = ChampDansRelation + 1
Next oRlt
Exit Function
err:
ChampDansRelation = -1
End Function
Cette fonction renvoie le nombre de relations qui utilisent le champ pass en paramtre.
Utilisation :
Dim oDb as DAO.Database
Set oDb=CurrentDB
MsgBox ChampDansRelation(oDb, "Commande", "Reference")
Cet exemple affichera le nombre de relations utilisant le champ Reference de la table Commande.
- 51 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Utilisation :
SupprimerChamp oDb, "Commande", "Reference"
- 52 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Un exemple sera certainement plus parlant que de longues phrases, je vous propose de crer un champ
AdresseClient dans une table nomme Client.
Ce champ aura pour cractristiques :
Type : Texte
Longueur : 120 caractres
Chaine vide autorise : Non
Null interdit : Oui
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
Dim oFld As DAO.Field
Set oDb = CurrentDb
Set oTbl = oDb.TableDefs("Client")
'Etape 1 : Crer le champ
Set oFld = oTbl.CreateField("AdresseClient", dbText, 120)
'Etape 2 : Dfinit les proprits
oFld.AllowZeroLength = False 'Chaine vide autorise : Non
oFld.Required = True
'Null interdit : Oui
'Etape 3 : Ajout du champ la table
oTbl.Fields.Append Fld
'Rafraichit la collection
oTbl.Fields.Refresh
Il est important de respecter l'ordre de chaque tape. Si vous ajouter le champ la collection Fields avant de lui avoir
affecter l'ensemble de ses proprits, vous vous apercevrez que certaines de ces proprits ne sont plus accessibles
en criture.
Nous n'avons pas trait ici la gestion d'erreur. Celle ci exactement la mme que pour la fonction
qui renomme un champ. En effet, le plus grand risque pour ce programme est d'utiliser un nom
de champ qui existe dj.
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Pour dupliquer le champ AdresseClient de la table Client dans la table SauvegardeClient nous utiliserons :
Dim oDb As DAO.Database
Dim oTblSource As DAO.TableDef, oTblDestination As DAO.TableDef
Dim oFld As DAO.Field
Set oDb = CurrentDb
'Stocke les deux tables
Set oTblSource = oDb.TableDefs("Client")
Set oTblDestination = oDb.TableDefs("SauvegardeClient")
'Stocke le champ
Set oFld = oTblSource.Fields("AdresseClient")
'Clone le champ
CloneChamp oFld, oTblDestination, "AdresseClient2"
4.5.1 - Dfinitions
Nous n'allons pas reprendre ici la dfinition d'un index. Je vous renvoie pour cela vers d'autres tutoriels de ce site.
Toutefois, rappelons sommairement qu'un index permet de faciliter l'accs aux donnes dans une table lors d'une
recherche et qu'il permet aussi de poser des contraintes sur les donnes (Notion de cl primaire et de doublons).
Un index peut tre compos d'un ou plusieurs champs, il possde donc une collection Fields recensant ces champs.
- 54 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.5.2.2 - Fields
Type : Collection
Cette collection regroupe l'ensemble des champs composant l'index. Chaque objet Field de cette collection doit
possder le mme nom qu'un objet Field de la table concerne.
4.5.2.3 - Foreign
Lecture seule.
Type : Boolean
Lorsque la proprit Foreign d'un index est gale True, cela signifie que l'index est une cl trangre. C'est
notamment le cas pour les index ajouts automatiquement par Access lorsque vous crez des relations entre les
tables.
4.5.2.4 - IgnoreNulls
Type : Boolean
Si vous dfinissez la proprit IgnoreNulls True, les valeurs nulles ne seront pas indxes. Cela peut tre utile si
vous prvoyer d'enregistrer un grand nombre de valeur nulles.
4.5.2.5 - Name
Type : String
Cette proprit correspond au nom de l'index. Ce nom doit tre unique dans la collection Indexes de l'objet TableDef
correspondant.
Prvoyez des noms d'index aussi clairs que possible. Aussi certains prfixent le nom de leurs
index par les initiales de leur rle. Ainsi, une cl primaire sera note PK_MonChamp (PK =
Primary Key).
4.5.2.6 - Properties
Type : Collection
Collection regroupant l'ensemble des objets Property de l'objet Index.
4.5.2.7 - Required
Type : Boolean
Si la proprit Required est gale True, cela signifie que les champs de l'index doivent tous recevoir une valeur,
sans quoi, lors des mises jour, une erreur sera leve.
- 55 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.5.2.8 - Unique
Type : Boolean
Lorsque la proprit Unique est gale True, les doublons sont interdits dans les champs de l'index.
Dans un index multi-colonnes, les valeurs A A et A B ne sont pas des doublons.
4.5.3.1 - CreateField
Cette mthode est la mme que celle applique aux objets TableDef, la diffrence prs quelle ne propose qu'un
seul paramtre : le nom du champ. Ce nom doit tre identique celui du champ de la table sur lequel repose l'index.
Syntaxe :
Set field = index.CreateField (name)
4.5.3.2 - CreateProperty
Cette mthode n'est plus prsenter, et pour cause, nous la retrouvons chaque chapitre de ce tutoriel. Aussi, je
vous renvoie vers le chapitre des 4.2.5 Proprits spcifiques.
- 56 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Utilisation :
Dim oDb As DAO.Database
Dim oTbl As DAO.TableDef
'Instancie la base
Set oDb = CurrentDb
'Instancie la table
Set oTbl = oDb.TableDefs("Client")
'Supprime la cl primaire
SupprimerClePrimaire oTbl
4.6.1 - Dfinitions
Certaines applications sont juges sur leur performance ou leur ergonomie. Lorsqu'il s'agit d'une base de donnes,
les critres de slection ne sont plus les mmes. Le rle principal d'un SGBD est de stocker des donnes et ce
stockage doit tre ralis dans les meilleures conditions. Il serait dramatique que certaines donnes soient perdues
frquemment. Une application Access doit donc garantir la cohrence et l'intgrit des donnes. Imaginons une table
Commande et une table Client, il serait illogique d'affecter une commande un client non recens dans la table
Client. Afin d'viter ce risque , le moteur Jet permet de crer des contraintes d'intgrits par le biais de ses objets
Relations qui obligeront saisir un client valide dans la table des commandes.
- 57 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La proprit Attributes correspond au type de la contrainte reprsente par l'objet Relation. La valeur de cette
proprit doit tre une (ou une combinaison) des constantes suivantes :
Constante
dbRelationUnique
dbRelationDontEnforce
dbRelationUpdateCascade
dbRelationDeleteCascade
dbRelationLeft
dbRelationRight
Signification
Relation de type un un.
L'intgrit rfrentielle n'est pas
applique.
Les mises jours sont rpercutes en
cascade.
Les suppressions sont rpercutes en
cascade.
Les jointures seront de type Left par
dfaut.
Les jointures seront de type Rigth par
dfaut.
4.6.2.2 - Fields
Type : Collection
Cette collection regroupe l'ensemble des champs utiliss par la relation. Vous devez utiliser la mthode
Relation.CreateField pour crer de nouveaux champs dans la relation et les ajouter la collection Fields l'aide
de la mthode Append.
Chaque objet Field de la relation doit possder le nom du champ concern dans la table
spcifie dans la proprit Table. Ce champ aura comme proprit ForeignName, le nom d'un
champ de la table spcifie dans la proprit ForeignTable.
4.6.2.3 - ForeignTable
Type : String
La proprit ForeignTable correspond au nom de la table externe de la relation. Ce nom doit tre celui d'un objet
TableDef prsent dans la collection TableDefs de l'objet Database.
4.6.2.4 - Name
Type : String
La proprit Name reprsente le nom de la relation. Il doit tre unique au sein de la collection Database.Relations.
L'utilisation de nom prcis facilitera les oprations de maintenance sur la base de
donnes. Ainsi, une relation entre une table commande et une table client sera nomme
Rlt_CommandeClient. Evitez d'appeler vos objets Relation1, Table1, Requete1...
4.6.2.6 - Properties
Type : Collection
La collection Properties regroupe l'ensemble des proprits de l'objet Relation.
- 58 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.6.2.7 - Table
Type : String
La proprit Table correspond au nom de la table principale sur laquelle porte la relation. Il s'agit de la table possdant
la cl primaire utilise dans la relation. A contrario, la proprit ForeignName correspond la table possdant la cl
trangre de la relation.
Paramtres de la relation :
- 59 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Attributes : dbRelationUpdateCascade
Fields : Un objet Field nomm "NumClient" et ayant comme proprit ForeignName : "IDClient"
ForeignTable : "Commande"
Name : "Rlt_CommandeClient"
PartialReplica : False (Non utilis)
Table : "Client"
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La seconde mthode consite utiliser l'ensemble des arguments de la mthode CreateProperty. En effet celle-ci
permet d'initialiser le nom de la relation, de la table, de la table externe ainsi que les attributs.
Syntaxe :
Set relation = database.CreateRelation (name, table, foreigntable, attributes)
La table dont il provient est prsent dans la proprit Table de la relation et que le nom d'un champ de la
relation est gal au nom de ce champ.
La table dont il provient est prsent dans la proprit ForeignTable de la relation et qu'au moins un champ de
cette relation possde une proprit ForeignName gale au nom de ce champ.
Il nous suffit donc de boucler sur l'ensemble des objets Relation de la base de donnes.
Private Function ChampDansRelation(oBaseDeDonnees As DAO.Database, _
strNomTable As String, strNomChamp As String) As Integer
On Error GoTo err
Dim bolUtilise As Boolean
Dim oRlt As DAO.Relation
Dim oFld As DAO.Field
'Parcours les relations
For Each oRlt In oBaseDeDonnees.Relations
bolUtilise = False
If oRlt.Table = strNomTable Then
'Pour chaque champ, contrle le nom du champ
- 61 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Il devient alors possible de connatre le nombre de relations utilisant le champ NumClient de la table Client.
Utilisation :
Dim oDb as DAO.Database
Set oDb=CurrentDB
MsgBox ChampDansRelation(oDb, "Client", "NumClient")
- 62 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Nous sommes sur le point d'aborder le dernier objet de la partie DDL du modle DAO. Cette partie commencera par
une rapide prsentation de l'objet, suivie de la liste des proprits et des mthodes puis enfin, quelques exemples
d'utilisation en VBA.
4.7.1 - Dfinitions
Access est un des rares SGBDR permettant de stocker des requtes SQL dans la base de donnes sans qu'il ne
s'agissent de vues. Certes, une vue est le rsultat de cette requte mais son contenu est statique. Pour visualiser
les modifications intervenues dans le jeu d'enregistrements entre deux instants, il est ncessaire de recrer la vue.
Une requte stocke dans une base de donnes Access est dynamique. Elle est rexecute chaque fois que vous
la rouvrez. De telles requtes sont modlises par l'objet QueryDef dans DAO.
Ces requtes peuvent tre de plusieurs types : slection, union, insertion, mise jour, suppression, analyse
croise ...
Requtes paramtres :
DAO propose de grer les paramtres des requtes via la collection Parameters de l'objet QueryDef. Ces requtes
sont trop souvent oublies dans Microsoft Access et remplaces par des requtes SQL codes directement dans
VBA. Pourtant, la manipulation de ces requtes est trs simple :
PARAMETERS Param_Num Text ( 10 );
SELECT *
FROM Client
WHERE NumClient=Param_Num;
La clause PARAMETERS liste l'ensemble des paramtres avec leur type et (optionnellement) leur taille. La seconde
partie de la requte, est celle que vous auriez crit sans paramtre.
Ainsi, pour ouvrir un Recordset sur le client possdant le numro AF36, le code VBA serait :
Dim oDb As DAO.Database
Dim oQdf As DAO.QueryDef
Dim oRst As DAO.Recordset
Set oDb = CurrentDb
Set oQdf = oDb.QueryDefs("R01")
oQdf.Parameters("Num").Value = "AF36"
Set oRst = oQdf.OpenRecordset
Afin de comparer, voici le mme code sans utiliser les requtes paramtres :
Dim oDb As DAO.Database
Dim oSQL As String
Dim oRst As DAO.Recordset
Dim StrSQL As String
Set oDb = CurrentDb
StrSQL = "SELECT * FROM Client " & _
"WHERE NumClient=" & Chr(34) & "AF36" & Chr(34)
Set oRst = oDb.OpenRecordset(StrSQL)
L'utilisation des requtes paramtres apparait donc plus intuitive et vite de manipuler des fonctions de conversion
de chane. De plus, si demain, nous souhaitons modifier notre requte pour y ajouter une jointure, il nous suffit de
modifier le code SQL correspondant dans la requte paramtre. Si au contraire nous n'utilisons pas ces requtes,
il nous faut alors modifier notre code VBA aux diffrents endroit o la "requte" est mentionne.
- 63 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Si vous ouvrez un objet Database Db2 depuis la base de donnes Db1 et que vous xecutez
un objet QueryDef de Db2, les donnes seront prleves depuis Db2 et non dans Db1. Chaque
objet QueryDef travaille sur les donnes de l'objet Database qui le contient.
4.7.2.1 - Connect
Lecture seule.
Type : String
La proprit Connect renvoie la chaine de connexion utilise par la requte lorsque celle ci provient d'une autre
base de donnes.
4.7.2.2 - DateCreated
Lecture seule.
Type : Date
Cette proprit renvoie la date laquelle a t cr la requte.
4.7.2.3 - Fields
Lecture seule.
Type : Collection
Une nouvelle fois, nous rencontrons cette collection qui regroupe l'ensemble des champs retourns par la requte.
Notez que vous pouvez diffrencier le nom d'un champ et son alias en utilisant la proprit
SourceField de l'objet Field.
4.7.2.4 - LastUpdated
Lecture seule.
Type : Date
Cette proprit renvoie la date laquelle a t modifie la requte pour la dernire fois.
4.7.2.5 - MaxRecords
Type : Long
- 64 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La proprit MaxRecords correspond au nombre d'enregistrements renvoyer au maximum. Cette proprit peut
tre utilise lorsque le poste client ne dispose pas de ressources suffisantes afin de traiter l'ensemble des donnes.
Cette proprit est disponible uniquement pour les requtes utilisant une source de donnes
ODBC.
4.7.2.6 - Name
Type : String
La proprit Name reprsente le nom de la requte. Il doit tre unique au sein de la collection Database.QueryDefs.
Lorsque vous utilisez la mthode CreateQueryDef et que vous ne spcifiez pas l'argument
Name, la requte n'est pas sauvegarde dans la base de donnes la fin du traitement.
4.7.2.7 - Parameters
Type : Collection
Cette collection regroupe l'ensemble des paramtres d'un objet QueryDef. Il est impossible d'ajouter ou de supprimer
des lments de cette collection.
Un exemple d'utilisation de requte paramtre est disponible dans les dfinitions des
QueryDefs ci-dessus.
4.7.2.8 - Properties
Type : Collection
La collection Properties regroupe l'ensemble des proprits de l'objet QueryDef.
4.7.2.9 - RecordsAffected
Lecture seule.
Type : Long
Dans le cas d'une requte action (Insert,Update,Delete), la proprit RecordsAffected retourne le nombre
d'enregistrements affects par l'ordre SQL.
4.7.2.10 - ReturnsRecords
Type : Boolean
Cette proprit dfinit ou renvoie une valeur indiquant si une requte retourne des enregistrements.
La proprit ReturnsRecords est disponible uniquement pour les requtes SQL directes.
- 65 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.7.2.11 - SQL
Type : String
La proprit SQL correspond au code SQL de la requte.
Cette proprit correspond l'argument SQL de la mthode Database.CreateQueryDef.
4.7.2.12 - Type
Type : Long
La proprit Type renvoie le type de la requte. Cette proprit est dfinie automatiquement lorsque vous crez
l'objet QueryDef. Toutefois, elle peut vous permettre de recenser les objets QueryDef suivant leur rle.
Les valeurs possibles sont :
Constante
dbQAction
dbQAppend
dbQCompound
dbQCrosstab
dbQDDL
dbQDelete
dbQMakeTable
dbQProcedure
dbQSelect
dbQSetOperation
dbQSPTBulk
dbQSQLPassThrough
dbQUpdate
Signification
Action
Ajout
Non documente
Analyse croise
Dfinition de donnes
Suppression
CreateTable
Procdure stocke
Slection
Union
Requte ne renvoyant pas d'enregistrement
Requte SQL Directe
Mise jour
4.7.2.13 - Updatable
Lecture seule.
Type : Boolean
Cette proprit renvoie True si les donnes de la requte ne peuvent tre modifies.
- 66 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
4.7.3.2 - Execute
La mthode Execute xecute une requte Action. Une erreur sera leve si vous tentez d'excuter une requte de
slection.
Syntaxe :
querydef.Execute options
L'argument options doit tre une (ou une combinaison) des constantes suivantes :
dbDenyWrite
Constante
dbInconsistent
dbConsistent
dbSQLPassThrough
dbFailOnError
dbSeeChanges
Signification
Interdit l'accs en criture pour les autres
utilisateurs
(Valeur par dfaut) Excute des mises
jour sans vrifier la cohrence (intgrit
rferentielle)
Excute des mises jour en vrifiant la
cohrence
Excute une requte SQL Direct
En cas d'erreur, les mises jour sont
annules
Gnre une erreur d'excution si un autre
utilisateur modifie les donnes que vous tes
en train de modifier
4.7.3.3 - OpenRecordset
La mthode OpenRecordset ouvre un jeu d'enregistrements sur le rsultat de la requte.
Syntaxe :
Set recordset = object.OpenRecordset (type, options, lockedits)
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Utilisation :
Dim oDb As DAO.Database
Set oDb = CurrentDb
If ModifierSQL(oDb, "R01_SelectionClient", "SELECT NumClient FROM Client") Then
MsgBox "Le code SQL de la requte a t modifi avec succs"
End If
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
- 69 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Les Recordset donnent donc la possibilit de rcuperer le rsultat d'une requte dans une variable, de l'analyser,
de le modifier, etc... tout comme vous le feriez manuellement dans une feuille de donnes ou un formulaire.
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Ce type de Recordset est semblable au type Dynaset la diffrence qu'il s'applique exclusivement aux sources
de donnes ODBC Direct.
source : Il s'agit de la source d'enregistrements du Recordset. Il peut s'agir du nom d'une table, d'une requte ou
d'une instruction SQL valide retournant des enregistrements (SELECT). Dans le cas d'un Recordset de type Table,
cet argument est restreint au nom d'une table.
Pour tre valide, l'instruction SQL doit tenir compte des diffrents types de champ dans l'expression des critres.
Ainsi, si le champ NomClient est de type texte, la variable source slectionnant le client nomm Dupont sera :
Source="SELECT * FROM Client WHERE NomClient=" & chr(34) & "Dupont" & chr(34)
La fonction Chr(34) permet d'encadrer un critre de type texte avec des guillemets. En effet, nous n'aurions pas pu
crire :
Source="SELECT * FROM Client WHERE NomClient="Dupont""
En effet, dans ce cas, le " avant Dupont correspondrait la fermeture de guillemet associe au premier caractre
" (avant SELECT). Une erreur serait donc lev par le compilateur. Une solution possible est donc d'utiliser le code
Ascii du caractre ". Le contenu de la variable utilisant la fonction Chr sera aprs concatnation :
SELECT * FROM Client WHERE NomClient="Dupont"
Toutefois, il reste encore un problme. Si dans la valeur recherche figure un guillemet, le moteur Jet va l'interprter
lui aussi comme une fin de chaine de caractre. La solution est de doubler les guillemets dans l'expression du critre :
Source="SELECT * FROM Client WHERE NomClient=" & chr(34) & Replace(MaVariable,chr(34),chr(34) & chr(34)) & chr(34)
Ainsi, si MaVariable est gale Monsieur "X", alors la fonction Replace retournera Monsieur ""X"". La source du
Recordset sera, aprs concatnation :
SELECT * FROM Client WHERE NomClient="Monsieur ""X"""
Le type Date est plus simple traiter, il faut encadrer la valeur du critre par des #. Notons tout de mme que les
dates doivent tre en format amricain : mm/jj/yyyy.
- 71 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Un recordset slectionnant les commandes du 10 dcembre 2003 sera initialis avec la source suivante :
Source="SELECT * FROM Commande WHERE DateCommande=#12/10/2003#"
Type : Cet argument correspond au type du recordset gnrer. Les constantes disponibles sont :
Constante
dbOpenTable
dbOpenDynamic
dbOpenDynaset
dbOpenSnapshot
dbOpenForwardOnly
Type de recordset
Table
Dynamique (ODBC Direct)
Feuille de rponse
dynamique
Instantan
En avant seulement
Options : Ce paramtre dfinit les paramtres optionnels du Recordset. Il s'agit d'une (ou une combinaison) des
constantes suivantes :
dbAppendOnly
Constante
dbSQLPassThrough
dbSeeChanges
dbDenyWrite
dbDenyRead
dbInconsistent
dbConsistent
Effets
Permet aux utilisateurs d'ajouter de
nouveaux enregistrements l'objet
Recordset, tout en leur interdisant
de modifier ou de supprimer les
enregistrements existants (objet Recordset
de type Feuille de rponses dynamique
Microsoft Jet (Dynaset) uniquement).
Transmet une instruction SQL une source
de donnes ODBC connecte Microsoft Jet
en vue de son traitement (objet Recordset
de type Instantan Microsoft Jet (Snapshot)
uniquement).
Gnre une erreur d'excution si un
utilisateur modifie les donnes en cours
de modification par un autre utilisateur
(objet Recordset de type Feuille de
rponses dynamique Microsoft Jet (Dynaset)
uniquement).
Interdit aux autres utilisateurs de modifier ou
d'ajouter des enregistrements
Interdit aux autres utilisateurs de lire les
donnes d'une table
Autorise les mises jour incohrentes
Autorise uniquement les mises jour
cohrentes
Certaines constantes ont t volontairement oublies dans cette liste du fait qu'elles sont soit
inapplicables sous Access, soit dconseilles.
LockEdits : Il s'agit du mode de verrouillage des donnes utilis par le Recordset.
Les constantes disponibles sont :
- 72 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
dbReadOnly
Constante
dbPessimistic
dbOptimistic
Verrouillage
Interdit aux utilisateurs d'apporter des
modifications l'objet Recordset
Utilise le verrouillage pessimiste afin de
dterminer de quelle faon les modifications
sont apportes l'objet Recordset dans
un environnement multi-utilisateur. La
page contenant l'enregistrement que vous
modifiez est verrouille ds que vous utilisez
la mthode Edit (option par dfaut pour les
espaces de travail Microsoft Jet).
Utilise le verrouillage optimiste afin de
dterminer de quelle faon les modifications
sont apportes l'objet Recordset dans
un environnement multi-utilisateur. La
page contenant l'enregistrement n'est
pas verrouille tant que l'excution de la
mthode Update n'est pas termine
Certaines constantes ont t volontairement oublies dans cette liste du fait qu'elles sont
inapplicables sous Access.
Exemple :
Dim
Dim
Set
Set
oRst as DAO.Recordset
oDb as DAO.Database
oDb=CurrentDb
oRst=oDb.OpenRecordset("SELECT * FROM Client WHERE NumClient=2",dbOpenDynaset)
Les arguments utiliser sont les mmes que ceux de la mthode Database.OpenRecordset. Notons toutefois qu'il
est impossible d'ouvrir un Recordset de type Table sur un objet QueryDef.
Dans le cas d'une requete paramtre, vous devez affecter les paramtres avant d'ouvrir le
recordset. Il est impossible d'ouvrir un recordset sur une requete qui demande l'utisateur
de saisir des critres via une boite de dialogue (type inputbox). Une erreur d'xecution ( X
arguments attendus serait alors leve).
- 73 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
pour afficher et manipuler les donnes qu'il contient. Vous pouvez vous mme agir sur ce jeu d'enregistrement via la
proprit Recordset du formulaire. Ainsi, si vous utilisez la mthode Movenext sur le Recordset du formulaire, vous
vous apercevrez que votre formulaire a atteint l'enregistrement suivant. Notons aussi que tout dplacement dans le
Recordset du formulaire entraine l'appel de l'evenement Form_Current (sur activation) du formulaire.
Syntaxe :
Set recordset=Me.Recordset
La mthode RecordsetClone d'un formulaire permet de dupliquer le jeu d'enregistrements du formulaire afin que
vous puissiez manipuler les donnes sans que ces modifications ne soient rpercutes sur le formulaire et sans
qu'aucun vnement ne soit dclench. Pour que le formulaire prenne en compte les modifications apportes sur le
jeu d'enregistrements, il est ncessaire d'appeler la mthode Requery de ce formulaire.
Set recordset=Me.RecordsetClone
Si la phase Set Recordset=Nothing est optionnelle car les variables seront invitablement dtruites la fin de la
procdure (hors variables publiques dtruite en fin d'application), l'appel Close quant lui un caractre obligatoire.
En effet, une non fermeture systmatique des Recordsets est l'origine de l'accroissement si particulier de la taille
des bases de donnes Access, obligeant l'utilisateur recourrir au compactage rgulirement.
Une bonne pratique consiste placer la ligne suivante ds qu'un recordset n'est plus utile :
oRst.Close : Set oRst=Nothing
une avant le premier enregistrement. Lorsque vous tes cet emplacement, la proprit BOF du Recordset
est gale True
une aprs le dernier enregistrement. Dans ce cas, la proprit EOF est gale True.
Dans le cas o le jeu d'enregistrement est vide, la position courante se trouve la fois avant le premier enregistrement
et aprs le dernier. Ainsi, pour tester si le Recordset est vide ou pas, il suffit d'utiliser la condition suivante :
If Not oRecordset.EOF Then
Msgbox "Le jeu d'enregistrements n'est pas vide"
else
Msgbox "Le jeu d'enregistrements est vide"
- 74 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
End if
Exemple :
'Se place sur le premier enregistrement
oRecordset.MoveFirst
'Se place sur le dernier enregistrement
oRecordset.MoveLast
'Se place sur l'enregistrement prcdent
oRecordset.MovePrevious
'Se place sur l'enregistrement suivant
oRecordset.MoveNext
'Recule de trois enregistrements
oRecordset.Move -3
'Avance de trois enregistrements
oRecordset.Move 3
Lorsque vous atteignez le dernier enregistrement et que vous utilisez la mthode MoveNext, la
proprit EOF est gale True et la position courante n'est plus un enregistrement. Vous tes
la fin du recordset et un nouveau dplacement vers l'avant entrainera une erreur d'excution.
(Il en va de mme pour BOF et les dplacements en arrire)
Pour parcourir l'ensemble des enregistrements d'un Recordset, vous procderez ainsi :
'Tant que non fin du recordset
While Not oRecordset.EOF
'Passer au suivant
oRecordset.MoveNext
Wend
Ainsi, pour se positionner sur le premier enregistrement dont le champ NomClient commence par T dans un
formulaire :
Dim strCritere as string
strCritere="NomClient LIKE " & chr(34) & "T*" & chr(34)
- 75 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Me.Recordset.FindFirst strCritere
Si aucun enregistrement ne vrifie le critre, la proprit NoMatch du recordset est gale True.
Exemple :
Dim strCritere as string
strCritere="NomClient LIKE " & chr(34) & "T*" & chr(34)
Me.Recordset.FindFirst strCritere
If Me.Recordset.NoMatch Then Msgbox "Aucun enregistrement n'a t trouv"
Si par la suite, vous souhaitez revenir cette position, il suffit d'affecter la valeur mmorise la proprit Bookmark.
oRecordset.Bookmark=BytPosition
Ou
Dim oRst as DAO.Recordset
Dim oDb as DAO.Database
Set oDb=CurrentDb
Set oRst=oDb.OpenRecordset("SELECT NumClient,NomClient FROM Client WHERE NumClient=2",dbOpenDynaset)
Msgbox "Le nom du client est : " & Rst.Fields(1).Value
'Libration des objets
- 76 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
oRst.Close
oDb.Close
Set oRst=Nothing
Set oDb=Nothing
La proprit Value est le membre par dfaut d'un objet Field. Vous pouvez donc utiliser :
Msgbox "Le nom du client est : " & Rst.Fields(1)
Notre exemple ralise un Update massif sur l'ensemble de la table commande. Toutefois ne
perdez pas de vue que dans bien des cas, une instruction SQL peut suffir et reste bien plus
performante qu'une boucle sur un jeu d'enregistrement.
- 77 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Vous devez affecter chacun des champs dont la proprit Required est gale True, sans quoi une erreur sera leve.
De mme vous devez respecter les contraintes d'index que vous avez dfinit sur la table. Ainsi, une cl primaire ne
peut contenir de doublons.
Dans le cas o un des champs est de type NumroAuto, il est impossible d'affecter une valeur ce champ. La
numrotation automatique est gre par le moteur Jet. Toutefois, pour des raisons diverses et varies, vous pouvez
avoir le besoin de connaitre la nouvelle valeur du NumroAuto cr. La valeur d'un tel champ est disponible avant
l'appel de la mthode Update. Prenons l'exemple d'une table client dont le champ NumClient est auto-incrment :
Dim oRst as DAO.Recordset
Dim oDb as DAO.Database
Dim LngNouvelleValeur as Long
Set oDb=CurrentDb
Set oRst=oDb.OpenRecordset("TblClient",dbOpenTable)
'Passe en mode Ajout
oRst.AddNew
'Affecte les diffrents champs
oRst.Fields("NomClient").Value="DUPONT"
oRst.Fields("PrenomClient").Value="Martin"
'Rcupre le nouvel identifiant
LngNouvelleValeur=oRst.Fields("NumClient").Value
'Met Jour
oRst.Update
'Affiche le numro client de
'l'enregistrement nouvellement cr
Msgbox "Le client " & NouvelleValeur & " a t cr"
'Libration des objets
oRst.Close
oDb.Close
Set oRst=Nothing
- 78 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Set oDb=Nothing
Dans le cas d'un nombre important d'enregistrements ajouter, un ordre SQL (INSERT) envoy
la mthode Execute de l'objet Database sera plus performant que de charger un curseur
contenant tous les enregistrements en mmoire.
Nous aurions donc avec l'exemple de la souris optique :
Dim StrChaineSQL As String
StrChaineSQL="INSERT INTO TblProduit (Reference,Libelle) VALUES (" & chr(34) & "SRS200" & chr(34) & _
"," & chr(34) & "Souris optique sans fil" & chr(34) & ")"
CurrentDb.Execute StrChaineSQL
Toutefois, avec cette syntaxe il est impossible de retrouver la valeur d'un champ NumroAuto lors de l'ajout d'un
enregistrement. Certains affirmeront qu'il suffit alors de rcuprer la valeur maximum du champ concern pour ne
slectionner que le dernier enregistrement de la table, toutefois, cela ne garantit pas qu'il s'agisse de l'enregistrement
que vous venez d'ajouter. En effet, un autre utilisateur peut avoir ajout un autre enregistrement immdiatement
aprs vous.
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Dans le cas d'un autre type de Recordset, nous devons utiliser MoveLast afin d'atteindre le dernier enregistrement.
La proprit RecordCount retournera alors le nombre d'enregistrements de l'objet.
Dim oDb as DAO.Database
Dim oRst as DAO.Recordset
Dim LngNbEnregistrement As Long
'Instancie la base de donnes
Set oDb=CurrentDb
'Ouvre le curseur retournant le nombre de clients rsidant Paris
Set
oRst=oDb.OpenRecordset("SELECT * FROM TblCLients WHERE Ville=" & Chr(34) & "Paris" & Chr(34),dbOpenDynaset)
'Atteint le dernier enregistrement
oRst.MoveLast
'Compte les enregistrements accds (soit le total)
LngNbEnregistrement=oRst.RecordCount
'Libration des objets
oRst.Close
oDb.Close
Set oRst=Nothing
Set oDb=Nothing
- 80 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Notons toutefois que dans la majorit des cas, il est plus rapide d'ouvrir un nouvel objet Recordset directement depuis
un objet Database en spcifiant une requte SQL complte l'argument source.
- 81 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
5.5.1 - Gnralits
La lecture par bloc est un point trs important mais malheureusement fort oubli de DAO. En effet, la mthode
GetRows permet de retourner un tableau possdant un nombre donn d'enregistrements. Ces enregistrements sont
extraits partir de la position courante du Recordset.
La syntaxe est la suivante :
Set varArray = recordset.GetRows (numrows)
VarArray est un tableau deux dimensions recevant les donnes. Le premier indice correspond au champ et le
second au numro de l'enregistrement.
Recordset est le recordset possdant les donnes.
Numrows correspond au nombre d'enregistrements lire.
Dans le cas o le nombre d'enregistrements disponibles est infrieur au nombre extraire, la mthode GetRows
retourne un tableau dont le nombre d'lment sera gal au nombre d'enregistrements disponibles. Il est donc conseill
d'utiliser la mthode UBound pour connaitre la borne suprieure du tableau.
Aprs extraction, la position courante du Recordset est dfinit sur l'enregistrement suivant le dernier lu, vous pouvez
donc enchaner une autre lecture vers l'avant. Dans le cas o vous souhaiteriez lire les X enregistrements prcdents,
il vous faut atteindre le premier enregistrement lire l'aide de l'instruction Move. (Sans toutefois atteindre la position
BOF)
Lorsque le nombre de donnes lire devient important, il s'avre que l'utilisation de la mthode
GetRows pour accder aux donnes reprsente un gain de rapidit pouvant atteindre 20 %.
5.5.2 - Exemple
Cet exemple met en oeuvre l'utilisation de la mthode GetRows afin de raliser un formulaire affichant les
enregistrements par blocs de 10. Les donnes proviennent de la table Clients de la base de donnes Comptoir.mdb
(Rpertoire samples d'Access). De cette table, nous conserverons uniquement les champs suivants :
Code Client, Socit, Ville, Pays
Notre formulaire ce compose ainsi :
- 82 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Chaque zone de texte est indpendante et possde un nom gal celui de sa colonne, concatn avec le numro
de l'enregistrement quelle affichera.
Nous utiliserons deux variables dans la porte du formulaire :
Dim oRstClient As DAO.Recordset 'Stocke le curseur
Dim intnbLus As Integer
'Stocke le nb d'enregistrements lus la dernire fois
Le principe est simple, l'ouverture du formulaire, nous chargons le Recordset et affichons les 10 premiers
enregistrements.
Private Sub Form_Load()
Dim oDb As DAO.Database
'Instancie la base de donnes
Set oDb = CurrentDb
'Ouvre le recordset
Set oRstClient = oDb.OpenRecordset("Clients", dbOpenTable)
'Lit les 10 premiers
LectureVersLAvant
End Sub
Private Sub LectureVersLAvant()
On Error GoTo err
RemplirZoneTexte oRstClient.GetRows(10)
Exit Sub
err:
'Si on est sur le dernier enregistrement
'alors ne rien faire, sinon avertir
If err.Number <> 3021 Then
MsgBox "Une erreur est survenue pendant la lecture des donnes", vbCritical, "Erreur"
End If
End Sub
La procdure RemplirZonetexte boucle sur chaque ligne du tableau et affiche la valeur du champ dans la zone de
texte correspondante pour la ligne slectionne. Les autres lignes sont ensuites masques.
Sub RemplirZoneTexte(Tableau As Variant)
Dim I As Integer
'Rcupre le nombre d'enregistrements Lus
intnbLus = UBound(Tableau, 2) + 1
'affecte les valeurs aux zones de texte
For I = 0 To intnbLus - 1
- 83 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Les dplacements vers l'arrire sont plus complexes tant donn que si nous avons lu les 20 premiers, la position
courante du Recordset est dfinie 21 et les enregistrements 11 20 sont affichs. Or, la plage souhaite est celle
des lignes 1 10. Nous devons donc reculer du nombre d'enregistrements lu la prcdente fois et nous positionner
10 enregistrements en arrire pour commencer la lecture. Toutefois, il se peut que ce nombre de sauts excde le
nombre d'enregistrements disponibles vers l'arrire. Le plus simple est alors d'intercepter l'erreur leve (3021) afin
de ne pas stopper l'xecution et de se positionner sur le premier enregistrement du curseur.
Private Sub LectureVersLArriere()
On Error GoTo err
'Recule du nombre d'enregistrements ncessaire
oRstClient.Move -1 * intnbLus - 10
RemplirZoneTexte oRstClient.GetRows(10)
Exit Sub
err:
Select Case err.Number
'Si on a trop recul alors, se positionner sur le premier
Case 3021: oRstClient.MoveFirst
'Sinon, Avertir
Case Else: MsgBox "Une erreur est survenue pendant la lecture des donnes", vbCritical, "Erreur"
End Select
End Sub
- 84 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
5.6.1 - AbsolutePosition
Type : Long
La proprit AbsolutePosition correspond un numro reprsentant la position courante dans le Recordset. Le
premier enregistrement possde la position zro. En affectant cette proprit une valeur comprise entre 0 et le
nombre d'enregistrements - 1, le curseur va se dplacer de telle sorte atteindre l'enregistrement spcifi. Toutefois,
privilgiez l'utilisation de la proprit Bookmark pour mmoriser une position et y retourner. Dans le cas o le jeu
d'enregistrements est vide, cette proprit renvoie -1.
Elle ne s'applique pas aux Recorset de type Table (dbOpenTable) ni En avant seulement (dbOpenForwardOnly).
5.6.2 - BOF
Lecture seule.
Type : Boolean
Lorsque la proprit BOF d'un Recordset est gale True, cela signifie que la position courante du curseur est
dfinie avant le premier enregistrement.
Cette proprit s'applique tous les types de Recordset.
5.6.3 - Bookmark
Type : Variant
- 85 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
La proprit Bookmark correspond un signet identifiant de manire unique l'enregistrement au sein du Recordset.
Cette proprit est utiliser pour mmoriser une position ou se dplacer dans le jeu. Un exemple est disponible dans
la section intitule : 5.3.3 Mmoriser une position.
Cette proprit ne s'applique pas aux Recordset de type En avant seulement (dbOpenForwardOnly).
Les signets ne sont pas utilisables lorsque la proprit Bookmarkable est gale False.
5.6.4 - Bookmarkable
Lecture seule.
Type : Variant
La proprit Bookmarkable renvoie True lorsque le curseur accepte les signets (Ce qui est automatiquement le cas
pour une base de donnes Access). Si vous travailler en liaison avec certains SGBD, il est ncessaire de tester cette
valeur avant d'utiliser la proprit Bookmark.
Cette proprit ne s'applique pas Recordset de type En avant seulement (dbOpenForwardOnly).
5.6.5 - CacheSize
Type : Long
La proprit CacheSize correspond au nombre d'enregistrements stocks en mmoire cache. Sa valeur doit tre
comprise entre 5 et 1200 sans dpasser la quantit de mmoire disponible. La valeur 0 dsactive l'utilisation de la
mmoire cache.
Cette proprit est utilisable uniquement avec les Recordset de type dynamique ou instantan et lorsque les donnes
proviennent d'une source ODBC.
5.6.6 - CacheStart
Type : String
La valeur de la proprit CacheStart correspond au signet du premier enregistrement de l'objet Recordset placer
en mmoire cache. Vous pouvez utiliser le signet de tout enregistrement pour dfinir la proprit CacheStart.
Cette proprit est utilisable uniquement avec les Recordset de type dynamique ou instantan et lorsque les donnes
proviennent d'une source ODBC.
Cette proprit tant trs bien documente dans l'aide, je vous renvoie vers cette dernire pour
de plus amples dtails
5.6.7 - Connection
Lecture seule.
Type : Connection
- 86 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Dans un environnement ODBC Direct, la proprit Connection renvoie l'objet Connection depuis lequel le Recordset
a t ouvert.
Cette proprit n'est pas disponible pour les curseurs de type Table.
5.6.8 - DataCreated
Lecture seule.
Type : Date
Pour un Recordset de type Table, cette proprit retourne la date de cration de la table.
5.6.9 - EditMode
Lecture seule.
Type : Long
La proprit EditMode renvoie une valeur indiquant l'tat de modification de l'enregistrement courant.
Il s'agit d'une des constantes suivantes :
dbEditNone
Constante
Signification
Aucune opration de modification en
cours.
La mthode Edit a t invoque et
l'enregistrement actuel est dans le
tampon de copie. (La mthode Update
n'a pas encore t appele)
La mthode AddNew a t invoque
et l'enregistrement actuel dans le
tampon de copie est un nouvel
enregistrement qui n'a pas t
enregistr dans la base de donnes.
DbEditInProgress
dbEditAdd
Toutefois, si votre code est bien structur, vous devez tre capable de connaitre le statut de
votre curseur chaque ligne de code. L'utilisation de cette proprit doit donc se limiter a des
cas extrmes, ou pour debugguer un code existant.
5.6.10 - EOF
Lecture seule.
Type : Boolean
- 87 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Lorsque la proprit EOF d'un Recordset est gale True, cela signifie que la position courante du curseur est dfinie
aprs le dernier enregistrement.
Cette proprit s'applique tous les types de Recordset.
5.6.11 - Fields
Lecture seule.
Type : Collection
Cette collection regroupe l'ensemble des champs du Recordset. De plus amples informations sur les objets Field
sont disponibles dans la section 4.4 L'objet Field.
Cette proprit s'applique tous les types de Recordset.
5.6.12 - Filter
Type : String
La proprit Filter permet de spcifier un filtre qui sera appliqu lors de l'appel de la mthode OpenRecordset. Il s'agit
de la clause WHERE d'une requte SQL (sans le mot cl WHERE). De plus amples informations sont disponibles
dans la section 5.4.6 Filtrer les donnes.
5.6.13 - Index
Type : String
La proprit Index correspond au nom de l'index utilis dans un Recordset pour rechercher les enregistrements dans
un Recordset de type Table exclusivement.
5.6.14 - LastModified
Lecture seule.
Type : Variant
Cette proprit retourne un signet pointant vers le dernier enregistrement modifi ou ajout au jeu d'enregistrements.
Vous pouvez atteindre ensuite cet enregistrement en affectant ce signet la proprit Bookmark.
Exemple :
With oRecordset
.Bookmark=.LastModified
End With
Cette proprit s'applique tous les types de Recordset hormis le type En avant seulement (dbOpenForwardOnly).
5.6.15 - LastUpdated
Lecture seule.
- 88 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Type : Date
La proprit LastUpdated retourne la date laquelle la table d'un Recordset a t modifie pour la dernire fois.
Elle n'est appliquable qu'aux objets Recordset de type Table.
5.6.16 - LockEdits
Type : Boolean
Cette proprit dfinit le type de verrouillage utilis par le Recordset. Lorsque'elle est gale True (Valeur par dfaut),
la page est verrouille ds l'appel de la mthode Edit. Dans le cas contraire (False), la page d'enregistrements est
verrouille uniquement lors de l'appel de la mthode Update.
5.6.17 - Name
Type : String
La proprit Name reprsente le nom de l'objet. Cette proprit est inutile dans l'utilisation des Recordset tant donn
que ceux-ci ne sont pas nomms. Cette proprit est en fait gale aux 256 premiers caractres de l'argument Source
utilis lors de la mthode Database.OpenRecordset.
5.6.18 - NoMatch
Lecture seule.
Type : Boolean
La proprit NoMatch est gale True lorsque l'une des mthodes Find.... n'a pas trouv d'enregistrement vrifiant
le critre.
5.6.19 - PercentPosition
Type : Single
La proprit PercentPosition correspond une valeur 0 100 indiquant la position approximative dans le Recordset.
Bien que vous puissiez la dfinir pour vous dplacer, elle est de faible intrt en criture car approximative.
Elle n'est appliquables qu'aux Recordset de type Table, Dynaset et instantan.
Vous devez avoir atteint le dernier enregistrement afin que sa valeur soit significative par
rapport la globalit du Recordset. Sinon, cette proprit ne se base pas sur le nombre
d'enregistrements total mais parcourus. Pour atteindre le dernier enregistrement, vous pouvez
utiliser la mthode MoveLast.
5.6.20 - Properties
Lecture seule.
Type : Collection
- 89 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
Cette collection regroupe l'ensemble des proprits du Recordset, comme spcifi dans la section 4.2 Proprits
spcifiques.
5.6.21 - RecordCount
Lecture seule.
Type : Long
La proprit RecordCount retourne le nombre d'enregistrements total d'un Recordset de type Table ou le nombre
d'enregistrements auxquels vous avez eu accs dans un Recordset d'un autre type.
Elle n'est pas appliquable aux Recordset de type En avant seulement (dbOpenForwardOnly)
De plus amples informations sur cette proprit sont disponible dans la section intitule 5.4.5
Compter les enregistrements
5.6.22 - Restartable
Lecture seule.
Type : Long
Lorsque cette proprit est gale True, cela signifie qu'il est possible de mettre les donnes jour en rexcutant la
requte l'aide de Requery. En d'autres thermes, elle indique si la mthode Requery est supporte par le Recordset.
Dans le cas contraire, vous devrez rouvrir le curseur l'aide de la mthode OpenRecordset de l'objet Database
ou QueryDef utilis pour y puiser les donnes.
Elle est utilisable sur tout type de Recordset, toutefois, elle renvoie toujours False pour un Recordset de type Table.
5.6.23 - Sort
Type : String
La proprit Sort permet de spcifier un ordre de tri qui sera appliqu lors de l'appel de la mthode OpenRecordset.
Il s'agit de la clause ORDER BY d'une requte SQL (sans le mot cl ORDER BY). Ainsi, il est possible d'instancier
un nouvel objet Recordset tri depuis un autre :
Dim oDb as DAO.Database
Dim oRst as DAO.Recordset
Dim oRstTrie as DAO.Recordset
'Instancie la base de donnes
Set oDb=CurrentDb
'Ouvre le curseur retournant tous les clients
Set oRst=oDb.OpenRecordset("SELECT Ville,NomClient,PrenomClient FROM TblClients" _
,dbOpenDynaset)
'Tri sur la ville et le nom du client
oRst.Sort="Ville,NomClient"
'Ouvre un nouveau curseur
Set oRstTrie=oRst.OpenRecordset
'*************************************
'ici, traitement sur le recordset tri
'*************************************
'Libration des objets
oRst.Close
- 90 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
oRstTrie.Close
oDb.Close
Set oRst=Nothing
Set oRstTrie=Nothing
Set oDb=Nothing
5.6.24 - StillExecuting
Lecture seule.
Type : Boolean
Dans un environnement ODBC Direct, la proprit StillExecuting renvoie True si la requte d'ouverture du Recordset
est encore en cours d'excution.
5.6.25 - Transactions
Lecture seule.
Type : Boolean
Lorsque la proprit Transactions d'un objet Recordset est gale True, cela signifie que vous pouvez utiliser les
transactions sur ce Recordset. Pour dmarrer une transaction, utilisez la mthode BeginTrans de l'objet Workspace
ayant crer le curseur. Invoquez ensuite la mthode CommitTrans pour mettre jour les donnes ou Rollback pour
annuler.
Exemple :
Dim oRst as DAO.Recordset
Dim oDb as DAO.Database
Set oDb=CurrentDb
Set oRst=oDb.OpenRecordset("TblCommande",dbOpenTable)
'Demarre la transaction
DBEngine.Workspaces(0).BeginTrans
While Not oRst.EOF
'Passe en mode modification
oRst.Edit
'Affecte la date actuelle
oRst.Fields("DateCommande").Value=Now()
'Met Jour
oRst.Update
'Passe au suivant
oRst.MoveNext
Wend
'Demande confirmation
If Msgbox("Etes vous sr de vouloir continuer")=VbYes
'Si oui, mettre jour
DBEngine.Workspaces(0).CommitTrans
Else
'Sinon, annuler
DBEngine.Workspaces(0).Rollback
End if
'Libration des objets
oRst.Close
- 91 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
oDb.Close
Set oRst=Nothing
Set oDb=Nothing
5.6.26 - Type
Lecture seule.
Type : Long
La proprit Type renvoie le type de curseur utilis conformment aux informations spcifies dans la section : 5.2
Les diffrents types de Recordset.
5.6.27 - Updatable
Lecture seule.
Type : Boolean
Lorsque la proprit Updatable est gale False, il est impossible de mettre jour les donnes du Recordset.
5.6.28 - UpdateOptions
Type : Long
La proprit UpdateOptions correspond au mode de cration d'une clause WHERE dans une requte UPDATE lors
d'une mise jour par lot dans un environement ODBC Direct. Dans certains cas, il est ainsi possible de contourner un
dclencheur Update du SGBD distant en forant le moteur de base de donnes remplacer une requte UPDATE par
une requte DELETE suivie d'une requte INSERT. Toutefois, cette proprit ne sera pas d'avantage documente
dans ce document et je vous propose de consulter l'aide Access pour plus de dtails.
5.6.29 - ValidationRule
Lecture seule.
Type : String
La proprit ValidationRule dfinit la rgle de validation qui sera utilise pour valider les donnes lors de l'appel
de la mthode Update.
5.6.30 - ValidationText
Lecture seule.
Type : String
La proprit ValidationText correspond au message qui sera affich lors d'une mise jour si les donnes ne vrifie
pas la rgle spcifie dans ValidationRule.
- 92 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
5.7.1 - AddNew
La mthode AddNew permet d'ajouter un nouvel enregistrement au Recordset. Elle est illustre dans la section 5.4.3
Ajouter un enregistrement.
Exemple :
With oRecordset
.AddNew
.Fields("Nom")="Toto"
.Update
End With
5.7.2 - CancelUpdate
La mthode CancelUpdate est invoquer aprs les mthodes Edit ou Addnew pour annuler la mise jour. Dans
le cas d'un ajout, la position du Recordset est redfinie ce qu'elle tait avant l'appel de AddNew.
Exemple :
With oRecordset
.AddNew
.Fields("Nom")="Toto"
'Annule l'insertion
.CancelUpdate
End With
5.7.3 - Clone
La mthode Clone retourne un Recordset identique celui sur lequel elle est applique. Le recordset clon ne
possde pas d'enregistrement courant vous devez alors vous positionner sur l'enregistrement de votre choix. Notons
que les signets sont interchangeables entre chaque Recordset. Ainsi, il est possible de positionner le clone au mme
endroit que la source avec :
Dim oRst as DAO.Recordset
Dim oRstClone as DAO.Recordset
'****************************
'ici Code d'ouverture de Rst
'****************************
'Copie du recordset
Set oRstClone=oRst.Clone
'Dfinit le mme enregistrement courant
oRstClone.Bookmark=oRst.Bookmark
Une fois oRst clon, vous pouvez le fermer sans aucune incidence sur RstClone.
Cette mthode n'est pas compatible avec les objets Recordset de type En avant seulement (dbOpenForwardOnly)
- 93 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
5.7.4 - Close
La mthode Close ferme le Recordset. Toutefois, celle-ci ne libre pas la variable objet de la mmoire. Pour la librer,
vous devez attendre la fin de la procdure et la destruction de la variable ou affecter Nothing cette dernire.
Exemple :
oRecordset.Close
Set oRecordset=Nothing
5.7.5 - CreateQueryDef
La mthode CreateQueryDef copie l'objet QueryDef utilis pour ouvrir le Recordset. Celui-ci doit imprativement avoir
t ouvert l'aide de la mthode OpenRecordset d'un objet QueryDef.
Syntaxe :
Set querydef = oRecordset.CopyQueryDef
Cette mthode ne s'applique pas aux Recordset de type Table (Puisqu'ils ne sont pas ouverts depuis un objet
QueryDef).
5.7.6 - Delete
La mthode Delete supprime un enregistrement du Recordset. Elle est illustre dans la section 5.4.4 Supprimer un
enregistrement. Une fois l'enregistrement supprim, la position du Recordset n'est plus valide, vous devez donc
atteindre un autre enregistrement.
Exemple :
With oRecordset
.Delete
Msgbox "Suppression russie"
.MoveNext
End With
5.7.7 - Edit
La mthode Edit copie l'enregistrement dans le tampon et passe le Recordset en mode acEditInProgress afin que
vous puissiez modifier les donnes.
Un exemple d'utilisation est disponible dans la section : 5.4.2 Modifier un enregistrement.
- 94 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
5.7.9 - GetRows
La mthode GetRows lit et retourne dans un tableau deux dimensions X enregistrements partir de l'enregistrement
courant (X tant un nombre positif spcifi dans le seul argument de GetRows). Un exemple de formulaire lisant les
donnes par bloc est disponible dans la section 5.5 Lecture par bloc.
5.7.11 - OpenRecordset
La mthode OpenRecordset instancie un nouvel objet Recordset possdant la mme source de donnes que le
Recordset original mais en tenant compte des ventuelles proprits Filter et Sort.
Voici un exemple d'utilisation appliquant un filtre :
Dim oDb as DAO.Database
Dim oRst as DAO.Recordset
Dim oRstFiltre as DAO.Recordset
'Instancie la base de donnes
Set oDb=CurrentDb
'Ouvre le curseur retournant tous les clients
Set oRst=oDb.OpenRecordset("SELECT * FROM TblClients",dbOpenDynaset)
'Applique le filtre de slection des habitants de Paris
oRst.Filter="Ville=" & Chr(34) & "Paris" & Chr(34)
'Ouvre un nouveau curseur
Set oRstFiltre=oRst.OpenRecordset
'***************************************
'ici, traitement sur le recordset filtre
'***************************************
Cette mthode n'est pas disponible pour les Recordset de type En avant seulement (dbOpenForwardOnly).
5.7.12 - Requery
La mthode Requery met jour les donnes contenues dans un objet Recordset en excutant de nouveau la requte
sur laquelle l'objet est fond.
Notons que certains SGBD ne supportent pas l'utilisation de la mthode Requery. Dans ce cas,
vous pouvez interroger la proprit Restartable afin de connatre si Requery est applicable.
5.7.13 - Update
La mthode Update permet d'enregistrer les donnes depuis le tampon de copie vers la base de donnes. Cette
mthode est invoquer aprs l'affectation des diffrents champs suite un appel la mthode Edit ou AddNew.
Pour ne pas enregistrer les donnes, vous devez utiliser la mthode CancelUpdate.
Pour de plus amples informations, vous pouvez consulter la section 5.4.2 Modifier un enregistrement.
- 95 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/
6 - Conclusion
Tout au long de ce document, vous avez pu constater que DAO offre de multiples possibilits quant la manipulation
d'une base de donnes. Toutefois, chaque action doit tre rflchie et en aucun cas vous ne devez perdre de vue
que la cohrence et l'intgrit des donnes sont primordiales. A aucun moment vous ne devez prendre le risque de
perdre des enregistrements.
Depuis quelques annes, DAO tente tre remplac par le modle objet ADO (ActiveX Data Object). Cependant, il
reste un moyen simple d'accder votre base de donnes dans du code VBA. La hirarchie du modle DAO tant
trs proche de la fentre base de donnes sous Access, son approche est trs intuitive et ne ncessite pas de relles
connaissances dans le monde de la programmation oriente objet.
Je tiens remercier l'ensemble de l'quipe Access pour ses prcieux conseils et sa relecture ainsi que MED ALAOUI
SOSSE pour sa traduction en arabe. Je reste votre disposition par MP pour d'ventuelles remarques.
- 96 -
Copyright 2005 WARIN Christophe. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' trois ans de prison et jusqu' 300 000 de dommages et intrts.
http://warin.developpez.com/access/dao/