Professional 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.
1 - Introduction & Tlchargement..............................................................................................................................7 1.1 - Tlchargement............................................................................................................................................. 7 1.2 - Introduction.................................................................................................................................................... 7 2 - La hirarchie du modle DAO............................................................................................................................... 8 2.1 - Le modle objet.............................................................................................................................................8 2.2 - Quelques rappels sur les collections.............................................................................................................9 2.2.1 - Accder un lment d'une collection.................................................................................................9 2.2.2 - Compter les lments........................................................................................................................... 9 2.2.3 - Parcourir les lments d'une collection.............................................................................................. 10 2.2.4 - Ajouter un lment.............................................................................................................................. 10 2.2.5 - Supprimer un lment.........................................................................................................................11 3 - Accder une base de donnes........................................................................................................................ 12 3.1 - L'objet DBEngine......................................................................................................................................... 12 3.1.1 - Gnralits.......................................................................................................................................... 12 3.1.2 - Liste des proprits.............................................................................................................................12 3.1.2.1 - DefaultPassword......................................................................................................................... 12 3.1.2.2 - DelfaultType................................................................................................................................ 12 3.1.2.3 - DefaultUser................................................................................................................................. 12 3.1.2.4 - Errors...........................................................................................................................................12 3.1.2.5 - Inipath..........................................................................................................................................13 3.1.2.7 - Properties.................................................................................................................................... 13 3.1.2.8 - SystemDB................................................................................................................................... 13 3.1.2.9 - Version........................................................................................................................................ 13 3.1.2.10 - Workspaces...............................................................................................................................14 3.1.3 - Liste des mthodes............................................................................................................................. 14 3.1.3.1 - BeginTrans.................................................................................................................................. 14 3.1.3.2 - CommitTrans............................................................................................................................... 14 3.1.3.3 - CompactDatabase.......................................................................................................................14 3.1.3.4 - CreateDatabase.......................................................................................................................... 15 3.1.3.5 - CreateWorkspace........................................................................................................................15 3.1.3.6 - Idle...............................................................................................................................................15 3.1.3.7 - OpenDatabase............................................................................................................................ 16 3.1.3.8 - RepairDatabase.......................................................................................................................... 16 3.1.3.9 - Rollback.......................................................................................................................................16 3.2 - L'objet Workspace....................................................................................................................................... 16 3.2.1 - Gnralits.......................................................................................................................................... 16 3.2.2 - Liste des proprits.............................................................................................................................17 3.2.2.1 - Databases................................................................................................................................... 17 3.2.2.2 - IsolateODBCTrans...................................................................................................................... 17 3.2.2.3 - Name...........................................................................................................................................18 3.2.2.4 - Properties.................................................................................................................................... 18 3.2.2.5 - Type.............................................................................................................................................18 3.2.3 - Liste des mthodes............................................................................................................................. 18 3.2.3.1 - BeginTrans.................................................................................................................................. 18 3.2.3.2 - Close........................................................................................................................................... 18 3.2.3.3 - CommitTrans............................................................................................................................... 19 3.2.3.4 - CreateDatabase.......................................................................................................................... 19 3.2.3.5 - OpenDatabase............................................................................................................................ 19 3.2.3.6 - Rollback.......................................................................................................................................20 3.2.4 - Accder un groupe de travail spcifique......................................................................................... 20 3.3 - L'objet Database.......................................................................................................................................... 23 3.3.1 - Gnralits.......................................................................................................................................... 23 3.3.1.1 - La mthode CurrentDb............................................................................................................... 23 3.3.1.2 - La mthode CodeDb...................................................................................................................24 3.3.2 - Liste des proprits.............................................................................................................................24 3.3.2.1 - CollatingOrder............................................................................................................................. 24 3.3.2.2 - Connect....................................................................................................................................... 25 3.3.2.3 - Containers................................................................................................................................... 25
-2Copyright 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
3.3.2.4 - Name...........................................................................................................................................25 3.3.2.5 - Properties.................................................................................................................................... 26 3.3.2.6 - QueryDefs................................................................................................................................... 26 3.3.2.7 - RecordsAffected.......................................................................................................................... 26 3.3.2.8 - Recordsets.................................................................................................................................. 26 3.3.2.9 - Relations..................................................................................................................................... 26 3.3.2.10 - TableDefs.................................................................................................................................. 27 3.3.2.11 - Transactions.............................................................................................................................. 27 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............................................................................................................................ 28 3.3.3.3 - CreateQueryDef.......................................................................................................................... 28 3.3.3.4 - CreateRelation............................................................................................................................ 28 3.3.3.5 - CreateTableDef........................................................................................................................... 28 3.3.3.6 - Execute....................................................................................................................................... 29 3.3.3.7 - NewPassword............................................................................................................................. 29 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...........................................................................................................................................31 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....................................................................................................... 33 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
-3Copyright 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
4.4 - L'objet Field..................................................................................................................................................43 4.4.1 - Dfinition..............................................................................................................................................43 4.4.2 - Liste des proprits.............................................................................................................................43 4.4.2.1 - AllowZeroLength......................................................................................................................... 44 4.4.2.2 - Attributes..................................................................................................................................... 44 4.4.2.3 - CollatingOrder............................................................................................................................. 44 4.4.2.4 - DataUpdatable............................................................................................................................ 45 4.4.2.5 - DefaultValue................................................................................................................................ 45 4.4.2.6 - FieldSize......................................................................................................................................45 4.4.2.7 - ForeignName...............................................................................................................................46 4.4.2.8 - Name...........................................................................................................................................46 4.4.2.9 - OrdinalPosition............................................................................................................................ 46 4.4.2.10 - Properties.................................................................................................................................. 46 4.4.2.11 - Required.................................................................................................................................... 46 4.4.2.12 - Size........................................................................................................................................... 46 4.4.2.13 - SourceField............................................................................................................................... 47 4.4.2.14 - SourceTable.............................................................................................................................. 48 4.4.2.15 - Type...........................................................................................................................................48 4.4.2.16 - ValidationRule........................................................................................................................... 49 4.4.2.17 - ValidationText............................................................................................................................ 49 4.4.2.18 - Value......................................................................................................................................... 49 4.4.2.19 - VisibleValue............................................................................................................................... 49 4.4.3 - Liste des mthodes............................................................................................................................. 49 4.4.3.1 - AppendChunk..............................................................................................................................49 4.4.3.2 - CreateProperty............................................................................................................................ 49 4.4.3.3 - GetChunk.................................................................................................................................... 50 4.4.4 - Oprations sur les champs d'un objet TableDef................................................................................. 50 4.4.4.1 - Renommer un champ................................................................................................................. 50 4.4.4.2 - Supprimer un champ.................................................................................................................. 51 4.4.4.3 - Crer un champ.......................................................................................................................... 52 4.4.4.4 - Dupliquer un champ....................................................................................................................53 4.5 - L'objet Index.................................................................................................................................................54 4.5.1 - Dfinitions............................................................................................................................................ 54 4.5.2 - Liste des proprits.............................................................................................................................54 4.5.2.1 - DistinctCount............................................................................................................................... 54 4.5.2.2 - Fields...........................................................................................................................................55 4.5.2.3 - Foreign........................................................................................................................................ 55 4.5.2.4 - IgnoreNulls.................................................................................................................................. 55 4.5.2.5 - Name...........................................................................................................................................55 4.5.2.6 - Properties.................................................................................................................................... 55 4.5.2.7 - Required......................................................................................................................................55 4.5.2.8 - Unique......................................................................................................................................... 56 4.5.3 - Liste des mthodes............................................................................................................................. 56 4.5.3.1 - CreateField..................................................................................................................................56 4.5.3.2 - CreateProperty............................................................................................................................ 56 4.5.4 - Oprations sur les Index.....................................................................................................................56 4.5.4.1 - Crer un index............................................................................................................................ 56 4.5.4.2 - Supprimer une cl primaire........................................................................................................ 57 4.6 - L'objet Relation............................................................................................................................................ 57 4.6.1 - Dfinitions............................................................................................................................................ 57 4.6.2 - Liste des proprits.............................................................................................................................57 4.6.2.1 - Attributes..................................................................................................................................... 57 4.6.2.2 - Fields...........................................................................................................................................58 4.6.2.3 - ForeignTable................................................................................................................................58 4.6.2.4 - Name...........................................................................................................................................58 4.6.2.6 - Properties.................................................................................................................................... 58 4.6.2.7 - Table............................................................................................................................................59 4.6.3 - Liste des mthodes............................................................................................................................. 59
-4Copyright 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
4.6.4 - Exemple de dfinition des proprits..................................................................................................59 4.6.5 - Oprations sur les relations................................................................................................................ 60 4.6.5.1 - Crer une relation....................................................................................................................... 60 4.6.5.2 - Compter les relations utilisant un champ donn........................................................................ 61 4.6.5.3 - Supprimer les relations autour d'une table................................................................................. 62 4.7 - L'objet QueryDef.......................................................................................................................................... 63 4.7.1 - Dfinitions............................................................................................................................................ 63 4.7.2 - Liste des proprits.............................................................................................................................64 4.7.2.1 - Connect....................................................................................................................................... 64 4.7.2.2 - DateCreated................................................................................................................................ 64 4.7.2.3 - Fields...........................................................................................................................................64 4.7.2.4 - LastUpdated................................................................................................................................ 64 4.7.2.5 - MaxRecords................................................................................................................................ 65 4.7.2.6 - Name...........................................................................................................................................65 4.7.2.7 - Parameters..................................................................................................................................65 4.7.2.8 - Properties.................................................................................................................................... 65 4.7.2.9 - RecordsAffected.......................................................................................................................... 65 4.7.2.10 - ReturnsRecords........................................................................................................................ 65 4.7.2.11 - SQL........................................................................................................................................... 66 4.7.2.12 - Type...........................................................................................................................................66 4.7.2.13 - Updatable.................................................................................................................................. 66 4.7.3 - Liste des mthodes............................................................................................................................. 66 4.7.3.1 - CreateProperty............................................................................................................................ 66 4.7.3.2 - Execute....................................................................................................................................... 67 4.7.3.3 - OpenRecordset........................................................................................................................... 67 4.7.4 - Oprations sur les requtes................................................................................................................67 4.7.4.1 - Cration d'une requte............................................................................................................... 67 4.7.4.2 - Modifier le code d'une requte................................................................................................... 68 4.7.4.3 - Lister les requtes...................................................................................................................... 68 5 - Accs aux donnes............................................................................................................................................. 70 5.1 - Dfinition...................................................................................................................................................... 70 5.1.1 - Les diffrents types de Recordset...................................................................................................... 70 5.2 - Ouvrir et fermer un recordset......................................................................................................................71 5.2.1 - Depuis un objet Database.................................................................................................................. 71 5.2.2 - Depuis un objet QueryDef.................................................................................................................. 73 5.2.3 - Depuis un formulaire Access.............................................................................................................. 73 5.2-4 - Fermer un Recordset.......................................................................................................................... 74 5.3 - Positions et dplacements...........................................................................................................................74 5.3.1 - Se dplacer dans un Recordset......................................................................................................... 74 5.3.2 - Trouver un enregistrement.................................................................................................................. 75 5.3.3 - Mmoriser une position.......................................................................................................................76 5.4 - Manipulation des donnes...........................................................................................................................76 5.4.1 - Lire un enregistrement........................................................................................................................ 76 5.4.2 - Modifier un enregistrement................................................................................................................. 77 5.4.3 - Ajouter un enregistrement...................................................................................................................78 5.4.4 - Supprimer un enregistrement..............................................................................................................79 5.4.5 - Compter les enregistrements.............................................................................................................. 79 5.4.6 - Filtrer les donnes...............................................................................................................................81 5.5 - Lecture par bloc...........................................................................................................................................81 5.5.1 - Gnralits.......................................................................................................................................... 82 5.5.2 - Exemple...............................................................................................................................................82 5.6 - Liste des proprits..................................................................................................................................... 85 5.6.1 - AbsolutePosition.................................................................................................................................. 85 5.6.2 - BOF..................................................................................................................................................... 85 5.6.3 - Bookmark.............................................................................................................................................86 5.6.4 - Bookmarkable......................................................................................................................................86 5.6.5 - CacheSize........................................................................................................................................... 86 5.6.6 - CacheStart...........................................................................................................................................86
-5Copyright 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
5.6.7 - Connection...........................................................................................................................................87 5.6.8 - DataCreated........................................................................................................................................ 87 5.6.9 - EditMode..............................................................................................................................................87 5.6.10 - EOF................................................................................................................................................... 88 5.6.11 - Fields................................................................................................................................................. 88 5.6.12 - Filter...................................................................................................................................................88 5.6.13 - Index.................................................................................................................................................. 88 5.6.14 - LastModified...................................................................................................................................... 88 5.6.15 - LastUpdated...................................................................................................................................... 89 5.6.16 - LockEdits........................................................................................................................................... 89 5.6.17 - Name................................................................................................................................................. 89 5.6.18 - NoMatch............................................................................................................................................ 89 5.6.19 - PercentPosition..................................................................................................................................89 5.6.20 - Properties.......................................................................................................................................... 90 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............................................................................................................................................................97
-6Copyright 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' 3 ans de prison et jusqu' 300 000 E 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 : L'acccs aux donnes dans un environnement ODBC Direct La replication Les objets DAO ne concernant pas l'accs aux donnes (Scurit, Utilisateur, Conteneur ....)
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.
-7Copyright 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' 3 ans de prison et jusqu' 300 000 E 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.
L'utilisation de DAO implique de nombreuses dclarations de variables. Ceci demande beaucoup de rigueur. Aussi je vous invite consulter le tutoriel sur les conventions de nommage Visual Basic crit par Jean-Philippe AMBROSINO : Les conventions typographiques en VBA (illustres sur Access)
-8Copyright 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' 3 ans de prison et jusqu' 300 000 E 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
-9Copyright 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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 : L'ensemble des erreurs Oracle Une erreur Odbc
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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
3.1.2.10 - Workspaces
Type : Collection 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"
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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 :
Set database = DBEngine.CreateDatabase (name, locale, [options])
L'argument name correspond au nom complet de la base de donnes. locale est une constante reprsentant l'ordre de tri appliquer (dbLangGeneral pour la France). Le dernier argument est facultatif et permet de spcifier le codage et la version de la base de donnes. Exemple :
Set db = DBEngine.CreateDatabase("c:\mabase.mdb", dbLangGeneral)
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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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)
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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Espace de travail Jet : Zone de travail utilisant le moteur de base de donnes Microsoft Jet pour accder une source de donnes. Cette source de donnes peut prendre la forme d'un fichier de base de donnes Microsoft Jet (.mdb), ODBC, Paradox ou ISAM. Espace de travail ODBC Direct : Il s'agit d'une technique d'accs aux donnes une source ODBC sans passer par le moteur de base de donnes Jet. Seul l'espace de travail Jet sera abord ici. 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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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.
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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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. 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])
L'argument name correspond au nom complet de la base de donnes. locale est une constante reprsentant le tri appliquer (dbLangGeneral pour la France). Le dernier argument est facultatif et permet de spcifier le codage et la version de la base de donnes. Exemple :
Set db = DBEngine.Workspaces(0).CreateDatabase("c:\mabase.mdb", dbLangGeneral)
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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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")
3.2.3.6 - Rollback
La mthode Rollback met fin une transaction dmarre avec BeginTrans. Exemple :
DBEngine.Workspaces(0).RollBack
- 20 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Il est compos de haut en bas : Une zone de texte TFichier Une liste modifiable ListeSecu Une zone de texte TAdmin Une zone de texte TUser Une zone de texte TMDP
Dfinition et manipulation de donnes avec DAO par Christophe WARIN vbExclamation, "Saisie du fichier" End If Exit Sub err: MsgBox "Impossible de se connecter la base de donnes. " & _ "Vrifier le chemin d'accs et les informations " & _ "d'authentification", vbCritical, "Erreur" End Sub
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 :
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 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. - 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.
Dfinition et manipulation de donnes avec DAO par Christophe WARIN Set Tbl2 = CurrentDb.TableDefs("Table2")
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 Tbl As DAO.TableDef, Tbl2 As DAO.TableDef Db as DAO.Database Db=CurrentDb Tbl = Db.TableDefs("Table1") Tbl2 = Db.TableDefs("Table2")
Ici, une seule instance de l'objet database est utilise. La proprit DBEngine.Workspaces(0).Databases(0) reprsente aussi la base de donnes ouverte. Toutefois, cette mthode est dconseille car elle ne cre pas une nouvelle instance de l'objet Database. Au contraire, son rsultat peut tre considr comme un pointeur vers la base de donnes. Aussi, dans un environnement multi-utilisateurs, ceci peut engendrer des conflits d'accs aux donnes. Privilgiez donc la mthode CurrentDb.
- 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' 3 ans de prison et jusqu' 300 000 E 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
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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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 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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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. 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)
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) - 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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. 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' 3 ans de prison et jusqu' 300 000 E 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.
Pourquoi certaines proprits ne figurent que dans la collection properties ? Tout d'abord, bon nombre de proprits de la collection Properties ne sont pas cres jusqu' ce qu'une valeur ne leur soit affecte. Ainsi, la proprit description de l'objet TableDef n'existe pas si vous n'avez pas encore saisi la description de la table sous Access.
- 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' 3 ans de prison et jusqu' 300 000 E 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
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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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 : Constante 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)
dbBigInt dbBinary
16 9 1 2 18 5 8 20 7 21 15 3 4 11 12 19 6 10 22 23 17
dbBoolean dbByte dbChar dbCurrency dbDate dbDecimal dbDouble dbFloat dbGUID dbInteger dbLong dbLongBinary dbMemo dbNumeric dbSingle dbText dbTime dbTimeStamp dbVarBinary
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.
- 32 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 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
Public Function ModifProperty(colTProperties As DAO.Properties, _ strTNom As String, strTValeur As Variant) As Boolean On Error GoTo err Dim oTmpPrp As DAO.Property 'Recherche l'lment Set oTmpPrp = colTProperties(strTNom) 'Modifie la valeur oTmpPrp.Value = strTValeur 'Rafraichit la collection colTProperties.Refresh 'L'opration est termine, renvoyer True ModifProperty = True Exit Function 'Gestion des erreurs err: Select Case err.Number Case 3270 MsgBox "Proprit non trouve" Case 3421 MsgBox "Type de proprit incompatible" Case Else MsgBox "La proprit est en lecture seule" End Select End Function
Utilisation :
Dim oDb As DAO.Database Dim oTbl As DAO.TableDef Set oDb = CurrentDb Set oTbl = oDb.TableDefs("Commande") ModifProperty oTbl.Properties, "description", "essai"
Quelques remarques sur cette fonction : TValeur correspond la nouvelle valeur de la proprit. Le type de cet argument est Variant, pour s'adapter l'ensemble des types possibles. Toutefois, si vous ne souhaitez modifier des proprits exclusivement de type String, vous pouvez remplacer le type Variant par String. La mthode Refresh applique la collection Properties permet de mettre jour immdiatement la proprit. Si cette mthode n'est pas employe, les modifications ne seront effectives qu'aprs avoir redmarr votre application. La fonction renvoie false en cas d'chec de la modification de la proprit. Il est inutile d'utiliser cette fonction pour les proprits non spcifiques. En effet, les proprits proposes par l'explorateur d'objets (F2) sont des proprits intgres que vous pouvez modifier avec la syntaxe habituelle Objet.Proprit. Exemple :
Dim oDb As DAO.Database Dim oTbl As DAO.TableDef Set oDb = CurrentDb Set oTbl = oDb.TableDefs("Commande") oTbl.name= "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' 3 ans de prison et jusqu' 300 000 E 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.
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 - 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 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 de Login utilises pour lier la table sont sauvegardes. Indique une table systme. Indique une table cache. Indique une table lie via le moteur Jet. Indique une table lie via ODBC.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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 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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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 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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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 :
tabledef.RefreshLink
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
4.3.4 - Oprations sur les tables d'une base de donnes 4.3.4.1 - Lister les tables d'une base de donnes
Je vous propose quelques codes utiles pour lister l'ensemble des tables d'une base de donnes. Nous ferons la distinction entre les tables systmes et les tables lies. En effet, la proprit Attributes est un masque binaire. L'oprateur AND entre une constante recherche et la valeur de la proprit effectue une opration binaire renvoyant un nombre gal 0 si la constante n'est pas utilise dans la proprit. Ainsi, pour savoir si une table est une table systme, il est possible d'utiliser :
If monObjet.Attributes AND dbSystemObjet then .....
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
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 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
- 41 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Private Function ExistRelation(oBaseDeDonnees As DAO.Database, _ strNomTable As String) As Integer Dim oRlt As DAO.Relation 'Pour chaque objet relation For Each oRlt In oBaseDeDonnees.Relations 'Si la table est prsente dans la relation If oRlt.Table = strNomTable Or oRlt.ForeignTable = strNomTable Then _ ExistRelation = ExistRelation + 1 Next oRlt End Function
Cette fonction renvoie le nombre de relations dpendantes de la table passe en paramtre. Nous pouvons donc crire la fonction de suppression de table suivante :
Private Function SupprimerTable(oBaseDeDonnee As DAO.Database, _ strNomTable As String) On Error GoTo err Dim intNbRlt As Integer 'Compte le nombre de relations dpendantes intNbRlt = ExistRelation(oBaseDeDonnee, strNomTable) 'Si la table est prsente dans au moins une relation If NbRlt <> 0 Then 'si l'utilisateur ne souhaite pas continuer, sortir de la fonction If MsgBox("La table " & strNomTable & " est utilise dans " & _ intNbRlt & " relation(s)." & vbCrLf & "La suppression de cette table entrainera la" & _ " suppression de cette(ces) relation(s)." & vbCrLf & vbCrLf & "Voulez vous continuer ?", _ vbQuestion + vbYesNo, "Suppression de table") = vbNo Then Exit Function End If 'Supprime la table oBaseDeDonnee.TableDefs.Delete (strNomTable) 'Rafraichit la collection oBaseDeDonnee.TableDefs.Refresh 'Renvoie true SupprimerTable = True Exit Function err: 'Gre les erreurs Select Case err.Number Case 3265: MsgBox "Impossible de trouver la table supprimer" Case Else: MsgBox "Une erreur inattendue est survenue" End Select End Function
Utilisation :
Dim oDb As DAO.Database Dim oTbl As DAO.TableDef Set oDb = CurrentDb If SupprimerTable(oDb, "Commande") Then MsgBox "Table supprime" End If
- 42 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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 : Constante 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.
dbUpdatableField dbVariableField
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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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 : Constante 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)
dbBigInt dbBinary
16 9 1 2 18 5 8 20 7 21 15 3 4 11 12 19 6 10 22 23 17
dbBoolean dbByte dbChar dbCurrency dbDate dbDecimal dbDouble dbFloat dbGUID dbInteger dbLong dbLongBinary dbMemo dbNumeric dbSingle dbText dbTime dbTimeStamp dbVarBinary
- 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dim oDb As DAO.Database Set oDb = CurrentDb If RenommerChamp (oDb, "Commande", "Reference", "Nouvelle_Reference") then msgbox "Opration termine" End if
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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
La fonction retourne -1 si une erreur est survenue. Nous pouvons donc crire la fonction de suppression suivante :
Private Function SupprimerChamp(oBaseDeDonnees As DAO.Database, strNomTable As String, _ strNomChampASupprimer As String) As Boolean On Error GoTo err Dim oTbl As DAO.TableDef 'Verifie que le champ ne fait pas partie d'une relation If ChampDansRelation(oBaseDeDonnees, strNomTable, strNomChampASupprimer) = 0 Then 'Rcupre la table Set oTbl = oBaseDeDonnees.TableDefs(strNomTable) 'Supprime le champ oTbl.Fields.Delete (strNomChampASupprimer) 'Renvoie True SupprimerChamp = True Else MsgBox "Impossible de supprimer le champ, il est utilis par une ou plusieurs relations" End If Exit Function err: Select Case err.Number 'Si impossible de trouver l'lment dans la collection Case 3265 'Si tbl=nothing alors tbl est la cause de l'erreur If Tbl Is Nothing Then MsgBox "Impossible de trouver la table : " & strNomTable Else MsgBox "Impossible de trouver le champ : " & strNomChampASupprimer End If Case 3280: MsgBox "Impossible de supprimer un champ utilis par un index" Case Else: MsgBox "Une erreur inattendue est survenue" End Select End Function
Utilisation :
SupprimerChamp oDb, "Commande", "Reference"
Un exemple sera certainement plus parlant que de longues phrases, je vous propose de crer un champ AdresseClient dans une table nomme Client.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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.
- 53 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN Case Else: MsgBox "Une erreur inattendue est survenue" End Select End Sub Private Sub EcrirePropriete(oPropriete As DAO.Property, _ oChampDestination As DAO.Field) On Error GoTo err 'Copie la proprit With oChampDestination.Properties .Item(oPropriete.Name) = oPropriete.Value .Refresh End With 'On ne traite pas les erreurs err: End Sub
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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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.
Dfinition et manipulation de donnes avec DAO par Christophe WARIN oTbl.Indexes.Append oInd 'Rafraichit la collection oTbl.Indexes.Refresh
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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Les proprits d'une telle relation seront dfinies ainsi : 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"
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 'Rafrahit la collection Relations oDb.Relations.Refresh 'Ferme la base de donnes oDb.Close Set oDb = Nothing
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)
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 - 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 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
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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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 = Qdf.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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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. 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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
4.7.2.5 - MaxRecords
Type : Long 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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
La proprit ReturnsRecords est disponible uniquement pour les requtes SQL directes.
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 Signification
dbQAction dbQAppend dbQCompound dbQCrosstab dbQDDL dbQDelete dbQMakeTable dbQProcedure dbQSelect dbQSetOperation dbQSPTBulk dbQSQLPassThrough dbQUpdate
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' 3 ans de prison et jusqu' 300 000 E 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 : Constante 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
Vous pouvez utiliser la proprit RecordsAffected pour connatre le nombre d'enregistrements modifis.
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)
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 'Instancie l'objet database Set oDb = CurrentDb 'Stocke le code SQL dans une variable strCodeSql = "SELECT * FROM Client" 'Cre la requte oDb.CreateQueryDef "R01_SelectionClient", strCodeSql Finally: oDb.Close Set oDb = Nothing Err: 'Gre les erreurs Select Case Err.Number Case 3012: MsgBox "La requte existe dj" Case Else: MsgBox "Une erreur inconue est survenue" End Select Resume Finally End Sub
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
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 'Instancie l'objet Database Set oDb = CurrentDb 'Boucle sur les objets QueryDef For Each oQdf In oDb.QueryDefs 'S'il s'agit d'une requte de slection, alors afficher son nom If oQdf.Type = dbQSelect Then MsgBox oQdf.Name, , "Slection" Next oQdf
- 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' 3 ans de prison et jusqu' 300 000 E 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.
- 70 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Il s'agit d'un Recordset de type Snapshot la diffrence qu'il ne permet de se dplacer exclusivement vers l'avant. Il est impossible de repartir au dbut du jeu d'enregistrement, ni mme de reculer au cours de la lecture des donnes. 5. Recordset de type Dynamic : 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 :
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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. 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 : Constante 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
dbAppendOnly
dbSQLPassThrough
dbSeeChanges
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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
dbReadOnly dbPessimistic
Constante
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).
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
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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Cinq mthodes sont disponibles pour se dplacer dans le Recordset : MovePrevious permet d'atteindre l'enregistrement prcdent. MoveNext permet d'atteindre l'enregistrement suivant. MoveFirst permet d'atteindre le premier enregistrement. MoveLast permet d'atteindre le dernier enregistrement. Move permet un dplacement relatif par rapport la position courante..
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 - 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN strCritere="NomClient LIKE " & chr(34) & "T*" & chr(34) 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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 'Libration des objets 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.
CurrentDb.Execute "UPDATE TblCommande SET DateCommande=#" & Now() & "#"
- 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' 3 ans de prison et jusqu' 300 000 E 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 Set oDb=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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
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.
- 79 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN Set oDb=CurrentDb 'Ouvre le curseur retournant le nombre de clients rsidant Paris Set oRst=oDb.OpenRecordset("SELECT Count(*) FROM TblCLients WHERE Ville=" & Chr(34) & "Paris" & Chr(34)) 'Lit le rsultat LngNbEnregistrement=oRst.Fields(0).Value 'Libration des objets oRst.Close oDb.Close Set oRst=Nothing Set oDb=Nothing
Notons qu'une requte utilisant la fonction de regroupement Count retourne au moins un enregistrement. De ce fait le curseur ne sera jamais vide son ouverture, il n'est donc pas obligatoire de tester l'existence d'enregistrement au sein du recordset avant de lire sa premire ligne. La seconde faon de procder consiste utiliser la proprit RecordCount du Recordset. Cette proprit renvoie le nombre d'enregistrements d'un recordset de type Table ou le nombre d'enregistrements accds lorsqu'il s'agit d'un Recordset d'un autre type. Ainsi, pour compter le nombre d'enregistrements d'un recordset de type table, nous pouvons utiliser :
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 tous les clients Set oRst=oDb.OpenRecordset("TblCLients",dbOpenTable) 'Compte les enregistrements LngNbEnregistrement=oRst.RecordCount 'Libration des objets oRst.Close oDb.Close Set oRst=Nothing Set oDb=Nothing
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' 3 ans de prison et jusqu' 300 000 E 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.
Dim oDb as DAO.Database Dim oRstFiltre as DAO.Recordset 'Instancie la base de donnes Set oDb=CurrentDb 'Ouvre un curseur retournant tous les clients rsidant Paris Set oRstFiltre=oDb.OpenRecordset("SELECT * FROM TblClients WHERE Ville=" & Chr(34) & "Paris" & Chr(34)",dbOpenDynaset '*************************************** 'ici, traitement sur le recordset filtre '*************************************** 'Libration des objets oRstFiltre.Close oDb.Close Set oRstFiltre=Nothing Set oDb=Nothing
- 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' 3 ans de prison et jusqu' 300 000 E 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' 3 ans de prison et jusqu' 300 000 E 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 - 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN '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 'Affiche le code client Controls("TCodeClient" & I + 1) = Tableau(0, I) Controls("TCodeClient" & I + 1).Visible = True 'Affiche la societe Controls("TSociete" & I + 1) = Tableau(1, I) Controls("TSociete" & I + 1).Visible = True 'Affiche la ville Controls("TVille" & I + 1) = Tableau(2, I) Controls("TVille" & I + 1).Visible = True 'Affiche le pays Controls("TPays" & I + 1) = Tableau(3, I) Controls("TPays" & I + 1).Visible = True Next I 'Masque les autres zones de textes For I = intnbLus + 1 To 10 'Masque le code client Controls("TCodeClient" & I).Visible = False 'Masque la societe Controls("TSociete" & I).Visible = False 'Masque la ville Controls("TVille" & I).Visible = False 'Masque le pays Controls("TPays" & I).Visible = False Next I End Sub
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' 3 ans de prison et jusqu' 300 000 E 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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
5.6.3 - Bookmark
Type : Variant 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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
5.6.7 - Connection
Lecture seule. Type : Connection 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 : 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.
dbEditNone
DbEditInProgress
dbEditAdd
Cette proprit s'applique tous les types de Recordset. Ainsi dans un code complexe, il est possible de connaitre le statut de votre Recordset. Ainsi, pour savoir si nous sommes sur le point de valider l'ajout d'un enregistrement, nous devrons valuer :
If oRecordset.EditMode=dbEditAdd then Msgbox "Un ajout est en cours"
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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
5.6.10 - EOF
Lecture seule. Type : Boolean 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 - 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Cette proprit s'applique tous les types de Recordset hormis le type En avant seulement (dbOpenForwardOnly).
5.6.15 - LastUpdated
Lecture seule. 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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
5.6.20 - Properties
Lecture seule. Type : Collection 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
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN oRst.Sort="Ville,NomClient" 'Ouvre un nouveau curseur Set oRstTrie=oRst.OpenRecordset '************************************* 'ici, traitement sur le recordset tri '************************************* 'Libration des objets oRst.Close oRstTrie.Close oDb.Close Set oRst=Nothing Set oRstTrie=Nothing Set oDb=Nothing
Cette proprit ne s'applique qu'aux Recordset de type Dynaset et Instantan. 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.
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 - 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Dfinition et manipulation de donnes avec DAO par Christophe WARIN 'Si oui, mettre jour DBEngine.Workspaces(0).CommitTrans Else 'Sinon, annuler DBEngine.Workspaces(0).Rollback End if 'Libration des objets oRst.Close 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
- 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' 3 ans de prison et jusqu' 300 000 E 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 vrifie pas la rgle spcifie dans ValidationRule.
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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Cette mthode n'est pas compatible avec les objets Recordset de type En avant seulement (dbOpenForwardOnly)
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.
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.
- 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/
Pour de plus amples informations, vous pouvez consulter la section 5.4.2 Modifier un enregistrement.
- 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' 3 ans de prison et jusqu' 300 000 E 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.
- 97 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' 3 ans de prison et jusqu' 300 000 E de dommages et intrts.
http://warin.developpez.com/access/dao/