Définition et manipulation de données avec DAO

Image non disponible


précédentsommairesuivant

3. Accèder à une base de données

Ce chapitre est entièrement consacré à l'ouverture d'une base de données. Il vous fournira une liste de l'ensemble des propriétés et des méthodes de chaque objet utilisé ainsi que plusieurs exemples d'utilisation sous Visual Basic.

3.1. L'objet DBEngine

3.1.1. Généralités

L'objet DBEngine correspond au moteur de base de données. Il s'agit d'un composant logiciel qui interprète les requêtes que vous lui transmettez et interroge le fichier de base de données. Dans la plupart des cas, vous n'aurez jamais à l'instancier ni même à le contrôler puisque l'objet Access.Application possède une propriété DBEngine renvoyant le moteur de base de données actuellement utilisé. L'objet DBEngine propose dans ses propriétés la liste des espaces de travail (collection Workspaces) ainsi que d'autres propriétés relatives à la gestion des utilisateurs. Ces propriétés n'ont que peu d'intérêt dans le cas d'une utilisation normale sans gestion de sécurité. Toutefois, le moteur de base de données n'est pas à oublier puisque c'est lui qui encapsule les méthodes de transactions ainsi que les méthodes de réparation et de compactage de la base de données.

3.1.2. Liste des propriétés

Vous trouverez ci-dessous l'ensemble des propriétés de l'objet DBEngine.

3.1.2.1. DefaultPassword

Type : String

Il s'agit du mot de passe par défaut qui sera utilisé lors de la création d'un nouvel objet Workspace.

3.1.2.2. DelfaultType

Type : Long

Cette propriété correspond au type par défaut 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 défaut lors de la création d'un nouvel objet Workspace. Cette propriété est généralement utilisée en même temps que DefaultPassword.

3.1.2.4. Errors

Type : Collection

Cette collection regroupe l'ensemble des erreurs levées par le moteur de base de données. Une erreur DAO est identifiée par un numéro d'erreur et possède une description correspondant au message d'erreur. A chaque fois qu'une opération DAO échoue,un ou plusieurs objets Error sont créés et ajoutés à la collections Errors. Une fois que tous ces objets sont créés, une erreur d'exécution est levée par VBA. Cette erreur correspond à l'objet Error possédant le numéro d'erreur le plus élevé. Sous Access, lors d'une erreur DAO, un seul objet Error est créé pour réprésenter l'erreur. L'erreur levée par VBA est donc la même que celle du moteur de base de données. Toutefois, si vous tentez par exemple de vous connecter à une base de données Oracle via votre application, il se peut qu'Oracle lève plusieurs objets Error reprénsentant la même erreur. Vous trouverez donc dans la collection DBEngine.Errors :

  • L'ensemble des erreurs Oracle
  • Une erreur Odbc

Mais une seule erreur sera levée 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 propriété Inipath correspond au chemin du fichier d'initialisation du moteur de base de données. Il s'agit généralement d'une entrée 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 données, cette propriété représente trés peu d'intérêt pour le développeur 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 propriétés (Property) de l'objet DBEngine.

Pour plus d'informations sur la collection Properties, je vous renvoie vers la section 4.2 Les propriétés spécifiques.

3.1.2.8. SystemDB

Type : String

Il s'agit du chemin d'accès au fichier mdw (fichier de groupe de travail) à utiliser. Le fichier utilisé par défaut est celui contenu dans l'entrée du fichier ini ou de la base de registre spécifiée dans la propriété IniPath.

3.1.2.9. Version

Lecture seule.

Type : String

La propriété Version correspond à la version du moteur Jet. Par exemple : 3.6.

3.1.2.10. Workspaces

Type : Collection

Collection regroupant l'ensemble des espaces de travail (Worspaces(0) étant l'espace de travail par défaut).

Pour de plus amples informations, veuillez consulter le chapitre suivant : L'objet Workspace.

3.1.3. Liste des méthodes

Je vous propose la liste des méthodes applicables aux objets de la classe DBEngine.

3.1.3.1. BeginTrans

La méthode BeginTrans commence une transaction.

Exemple :

 
Sélectionnez

DBEngine.BeginTrans

3.1.3.2. CommitTrans

La méthode CommitTrans stoppe la transaction tout en enregistrant les données.

Exemple :

 
Sélectionnez

DBEngine.CommitTrans

3.1.3.3. CompactDatabase

La méthode CompactDatabase copie et compacte une base de données. Notons que la base de données doit être fermée pour réaliser cette opération.

Syntaxe :

 
Sélectionnez

DBEngine.CompactDatabase olddb, newdb, [locale], [options], [password]

olddb correspond au fichier source et newdb au fichier de destination (différent 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 :

 
Sélectionnez

DBEngine.CompactDatabase "c:\bd1.mdb", "c:\bd2.mdb"

3.1.3.4. CreateDatabase

La méthode CreateDatabase permet de créer une nouvelle base de données. Elle renvoie un objet de type DAO.Database.

Syntaxe :

 
Sélectionnez

Set database = DBEngine.CreateDatabase (name, locale, [options])

L'argument name correspond au nom complet de la base de données.
locale est une constante représentant l'ordre de tri à appliquer (dbLangGeneral pour la France). Le dernier argument est facultatif et permet de spécifier le codage et la version de la base de données.

Exemple :

 
Sélectionnez

Set db = DBEngine.CreateDatabase("c:\mabase.mdb", dbLangGeneral)

3.1.3.5. CreateWorkspace

Cette méthode permet de créer un nouvel objet WorkSpace (Espace de travail) et retourne l'objet créé.

Syntaxe :

 
Sélectionnez

Set workspace = DBEngine.CreateWorkspace(name, user, password, [type])

Name correspond au nom de l'espace de travail. Il permettra de l'identifier de manière unique dans la collection Workspaces.
User correspond au nom de l'utilisateur dans cet espace et password à son mot de passe (14 caractères au maximum). Ce couple d'authentification doit obligatoirement figurer dans le fichier mdw spécifié dans la propriété SystemDB, sans quoi une erreur sera levée par le moteur de base de données.
Le dernier argument est facultatif et correspond au type d'espace à créer. S'il n'est pas mentionné, ce sera le type figurant dans la propriété DefaultType qui sera utilisé.

Exemple :

 
Sélectionnez

Set Wks = DBEngine.CreateWorkspace("MonEspace", "Toto", "mdp#@#!mJ")

3.1.3.6. Idle

La méthode Idle donne la possibilité au moteur JET de traiter ses tâches en attente. Notons que cette méthode possède un argument facultatif. Si ce dernier est égal à dbRefreshCache, la mémoire est réactualisée avec uniquement les données les plus récentes en provenance du fichier de base de données.

Exemple :

 
Sélectionnez

DBEngine.Idle

3.1.3.7. OpenDatabase

Comme son nom l'indique, cette méthode ouvre une base de données. Elle renvoie un objet de type DAO.Database.

Syntaxe :

 
Sélectionnez

Set database = workspace.OpenDatabase (dbname, options, read-only, connect)

Dbname correspond au chemin d'accès de la base de données à ouvrir. Cet argument peut aussi être le nom d'une source ODBC. Si cette chaîne est nulle, et que la variable connect est égale à "ODBC;", une boite de dialogue de sélection de source de données est affichée.

L'argument option permet de spécifier si la base de données doit être ouverte en mode exclusif (True) ou pas (False). De plus l'argument read-only ouvre la base de données en lecture seule lorsqu'il est égal à True.

Enfin, l'argument connect est utilisé à la fois pour spécifier le type de base de données et le mot de passe système à utiliser pour ouvrir le fichier.

L'objet Database créé est ajouté automatiquement à l'espace de travail Workspaces(0).

Exemple :

 
Sélectionnez

Set db = DBEngine.OpenDatabase("c:\bd1.mdb", False, False, _
    "MS Access;PWD=mdp#@#!e)

3.1.3.8. RepairDatabase

La méthode RepairDatabase répare la base de données. Notons qu'elle n'est plus utilisée et est réservée pour assurer la compatibilité avec les anciennes versions.

Il est recommandé d'utiliser la méthode CompactDatabase en remplacement.

3.1.3.9. Rollback

Cette méthode met fin à une transaction démarrée avec BeginTrans.

Exemple :

 
Sélectionnez

DBEngine.RollBack

3.2. L'objet Workspace

3.2.1. Généralités

Deux types d'espaces de travail sont à distinguer :

Espace de travail Jet : Zone de travail utilisant le moteur de base de données Microsoft Jet pour accéder à une source de données. Cette source de données peut prendre la forme d'un fichier de base de données Microsoft Jet (.mdb), ODBC, Paradox ou ISAM.

Espace de travail ODBC Direct : Il s'agit d'une technique d'accés aux données à une source ODBC sans passer par le moteur de base de données Jet.

Seul l'espace de travail Jet sera abordé ici.

Un objet Workspace représente un espace de travail au sein du moteur de base de données (DBEngine). Il s'agit en fait d'une session du DBEngine dédiée à un utilisateur donné. Hormis le cas où vous voulez gérer vous-même l'ouverture de la base de données dans un environnement sécurisé, l'utilisation de l'objet Workspace sous Access a peu d'intérêt. En effet, l'objet Workspaces(0) du DBEngine est l'espace de travail par défaut. Il est instancié automatiquement par Access lors d'un appel à un objet DAO. Ainsi, en général, vous utiliserez une référence implicite à celui ci, notamment lorsque que vous utiliserez les méthodes CodeDB ou CurrentDB de l'objet Access.Application.

Toutefois, tout comme l'objet DBEngine, le Workspace est capable d'exécuter des méthodes de transaction, et permet en plus de paramétrer la gestion des curseurs du moteur Jet (Recordset). Son utilisation peut devenir alors primordiale lorsque l'on souhaite paramétrer d'avantage l'accès aux données.

Comme il a été précisé dans le chapitre précédent, c'est à partir de l'objet DBEngine qu'est créé chaque objet Workspace à l'aide de la méthode CreateWorkspace.

La méthode CreateWorkspace demande un identifiant unique pour l'objet créé. De plus, la création de tels objets est très rare dans le temps. Aussi, il est possible d'utiliser une variable qui contiendra la date de création de l'objet comme nom de l'objet Workspace à instancier.

Voici un exemple de création d'un objet Workspace :

 
Sélectionnez

Dim oWks As DAO.Workspace
Set oWks = DBEngine.CreateWorkspace(Format(Now(), _
  "yyyymmddhhnnss"), "Utilisateur1", "mpd#ç#", dbUseJet)

3.2.2. Liste des propriétés

Vous trouverez ci-dessous la liste des propriétés applicables à un objet de la classe Workspace.

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 propriété est égale à False (valeur par défaut), il est possible d'effectuer plusieurs transactions simultanées sur la même connexion ODBC. Toutefois, les bases de données SQL Server n'acceptent pas ce mode de fonctionnement, aussi dans le cas de connexion ODBC avec ce type de base de base de données, il vous faudra fixer cette propriété à True.

3.2.2.3. Name

Lecture seule.

Type : String

La propriété 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 possède cette collection qui regroupe l'ensemble des propriétés (Property) de cet objet.

De plus amples informations sur la collection Properties sont disponibles dans le chapitre Les propriétés spécifiques.

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 spécifié à la méthode CreateWorkspace du DBEngine. Si vous n'avez pas mentionné cette valeur lors de la création de l'espace de travail, il s'agit de la valeur de la propriété DefaultType du moteur de base de données. L'objet Workspaces(0) étant instancié automatiquement par Access lors d'un appel à un objet DAO, la propriété Workspaces(0).Type est donc égale à dbUseJet.
L'autre valeur disponible est dbUseODBC.

3.2.3. Liste des méthodes

Voici la liste des méthodes proposées par la classe Workspace. Bon nombre de ces méthodes sont communes à la classe DBEngine.

3.2.3.1. BeginTrans

La méthode BeginTrans commence une transaction.

Exemple :

 
Sélectionnez

DBEngine.Workspaces(0).BeginTrans

3.2.3.2. Close

La méthode Close ferme l'espace de travail correspondant. Notez que si vous fermez un objet Workspace, ses transactions en attentes sont détruite. De même si cet objet Workspace possède des objets Database ou Connection, ces objets sont aussi fermés, ce qui a pour effet de fermer leurs objets recordsets associés.

La fermeture d'un objet Workspace doit donc être une action réfléchie car elle peut entrainer la perte irrémédiable de données.

Exemple :

 
Sélectionnez

DBEngine.Workspaces(0).BeginTrans

3.2.3.3. CommitTrans

Cette méthode stoppe une transaction démarée avec BeginTrans tout en enregistrant les données.

Exemple :

 
Sélectionnez

DBEngine.Workspaces(0).CommitTrans

3.2.3.4. CreateDatabase

La méthode CreateDatabase permet de créer une nouvelle base de données. Elle renvoie un objet de type DAO.Database.

Syntaxe :

 
Sélectionnez

Set database = Workspace.CreateDatabase (name, locale, [options])

L'argument name correspond au nom complet de la base de données.
locale est une constante représentant le tri à appliquer (dbLangGeneral pour la France). Le dernier argument est facultatif et permet de spécifier le codage et la version de la base de données.

Exemple :

 
Sélectionnez

Set db = DBEngine.Workspaces(0).CreateDatabase("c:\mabase.mdb", dbLangGeneral)

3.2.3.5. OpenDatabase

Comme son nom l'indique, la méthode OpenDatabase ouvre une base de données. Elle renvoie un objet de type DAO.Database.

Syntaxe :

 
Sélectionnez

Set database = workspace.OpenDatabase (dbname, options, read-only, connect)

Dbname correspond au chemin d'accès de la base de données à ouvrir. Cet argument peut aussi être le nom d'une source ODBC. Si cette chaîne est nulle, et que la variable connect vaut "ODBC;", une boite de dialogue de sélection de source de données est affichée.

L'argument option permet de spécifier si la base de données doit être ouverte en mode exclusif (True) ou pas (False). De plus l'argument read-only ouvre la base de données en lecture seule lorsqu'il vaut True.

Enfin, l'argument connect est utilisé à la fois pour spécifier le type de base de données et le mot de passe pour ouvrir le fichier.

L'objet database créé est automatiquement ajouté à la collection Databases de l'objet Workspace aprés sa création.

Exemple :

 
Sélectionnez

Set db = DBEngine.Workspaces(0).OpenDatabase("c:\bd1.mdb", False, False, _
    "MS Access;PWD=mdp#@#!e")

3.2.3.6. Rollback

La méthode Rollback met fin à une transaction démarrée avec BeginTrans.

Exemple :

 
Sélectionnez

DBEngine.Workspaces(0).RollBack

3.2.4. Accéder à un groupe de travail spécifique

Comme il a été précisé plus haut, l'objet Workspace prend de l'importance lorsqu'il s'agit d'ouvrir une base de données sécurisée. En effet, lorsque que vous ouvrez un fichier mdb avec Access, vous êtes authentifié au sein d'un fichier de groupe de travail. Cela peut être le fichier System.mdw par défaut si vous n'avez pas implémenté de gestion de sécurité ou bien un fichier de votre création rassemblant les informations nécessaires à la protection de votre base de données. Or, il se peut que vous ayez besoin d'accéder à une autre base de données via DAO nécessitant d'utiliser un autre fichier mdw pour se connecter. Dans ce cas, il vous faut instancier un autre objet de type DAO.DBEngine et spécifier le chemin du fichier de groupe de travail à utiliser dans la propriété DBEngine.SystemDB.

Toutefois, cette méthode possède un inconvénient majeur. En effet, si vous essayez d'instancier un nouvel objet DBEngine alors que vous avez déjà utilisé des méthodes DAO auparavant dans votre code, il vous sera impossible de modifier la propriété SystemDB du nouvel objet DBEngine créé. Celle-ci conservera pour valeur celle de Application.DBEngine.SystemDB bien qu'aucune erreur ne soit levée lorsque vous tenterez de la modifier.

Il est donc impératif que l'instanciation de nouveaux objets DBEngine ait lieu avant tout autre appel DAO y compris les méthodes CodeDb et CurrentDb.

Je vous propose la création d'une interface permettant d'ouvrir une base de données Access en spécifiant le fichier mdw à utiliser.

Soit le formulaire suivant :

Image non disponible

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

Voici le code correspondant :

Code du bouton Valider :

 
Sélectionnez

Private Sub Commande10_Click()
'Ouvre le fichier avec la sécurité choisie
On Error GoTo err
Dim strfichier As String
Dim oVDb As DAO.Database
Dim chaine As String
Dim oVWk As DAO.Workspace
Dim oDbe As DBEngine
Dim strFichierMDW As String
If Len(TFichier) <> 0 Then

  strfichier = TFichier
  'prépare l'espace de travail
  If ListeSecu.ListIndex = 0 Or ListeSecu.ListIndex = 2 Then
    Set oVWk = Workspaces(0)
  Else
    strFichierMDW = OuvrirUnFichier(Me.HWnd, _
    "Selectionner un fichier de groupe de travail", 1, _
    "Fichier mdw", "mdw")
    If strFichierMDW = "" Then
      Exit Sub
    Else
      Set oDbe = New DBEngine
      oDbe.SystemDB = strFichierMDW
      Set oVWk = oDbe.CreateWorkspace(Format(Now(), _
        "yyyymmddhhnnss"), TUtilisateur, TMDP, dbUseJet)
    End If
  End If
  'Ouvre la base de données
  If ListeSecu.ListIndex = 2 Or ListeSecu.ListIndex = 3 Then
    Set oVDb = oVWk.OpenDatabase(strfichier, False, False, _
    "MS Access;PWD=" & TAdmin)
  Else
    Set oVDb = oVWk.OpenDatabase(strfichier)
  End If
Else
  MsgBox "Vous devez sélectionner un fichier", _
   vbExclamation, "Saisie du fichier"
End If
Exit Sub
err:
MsgBox "Impossible de se connecter à la base de données. " & _
  "Vérifier le chemin d'accès et les informations " & _
  "d'authentification", vbCritical, "Erreur"
End Sub

Code d'ouverture du formulaire :

 
Sélectionnez

Private Sub Form_Load()
'Vide les controles
Dim ctlT As Control
For Each ctlT In Me.Controls
If TypeOf ctlT Is TextBox Then
ctlT.Value = ""
If  ctlT.Name <> "TFichier" Then ctlT.Enabled = False
End If
Next ctlT
ListeSecu = "Aucune"
End Sub

Code du bouton parcourir

 
Sélectionnez

Private Sub Commande3_Click()
Dim strChemin As String
strChemin = OuvrirUnFichier(Me.Hwnd, _
"Selectionner une base de données Access", _
1, "Fichiers Access", "mdb")
If  strChemin <> "" Then
Me.TFichier = strChemin
End If
End Sub

La fonction OuvrirUnFichier est disponible dans la FAQ Access. Elle permet d'afficher une boîte de dialogue de sélection de fichier.

La base de données ainsi ouverte est disponible via l'objet : VDB de la procédure 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 système pour l'ouverture de l'objet Database.

Le choix du fichier de groupe de travail se réalise ici :

 
Sélectionnez

Set oDbe = New DBEngine
oDbe.SystemDB = strFichierMDW
Set VWK = oDbe.CreateWorkspace(Format(Now(), _
   "yyyymmddhhnnss"), TUtilisateur, TMDP, dbUseJet)

La première ligne permet d'instancier le nouveau moteur de base de données auquel nous spécifions ensuite le fichier mdw à ouvrir. Puis nous créons enfin le l'espace de travail à l'aide de la méthode CreateWorkspace.

Une des raisons majeures pour lesquelles la création de l'espace de travail lève une erreur est que le couple utilisateur - mot de passe est invalide dans le fichier mdw sélectionné. Il se peut aussi que l'affectation de la propriété SystemDB ait échouée, ce qui signifie que le code de votre projet utilise des méthodes DAO avant ce bloc d'instructions. Un moyen simple de le vérifier :

 
Sélectionnez

MsgBox oDbe.SystemDB
oDbe.SystemDB = FichierMDW
MsgBox oDbe.SystemDB

Si les deux MsgBox affichent le même résultat, cela indique que votre code utilise des instructions DAO avant cette procédure.

3.3. L'objet Database

 

3.3.1. Généralités

Comme vous avez pu le remarquer dans la fenêtre de base de données de l'application Access, un fichier mdb peut être décomposé en deux parties :

- La partie applicative. Elle regroupe à la fois les formulaires, les états, les modules et les macros.

- La partie données. Cette partie se retrouve dans l'ensemble des SGBD (Système de Gestion de Base de Données). Il s'agit des tables et des requêtes. Access étant un SGBDR (SGBD Relationnel), cette partie regroupe aussi l'ensemble des relations entre les différentes tables.

Le modèle objet DAO donne accès à la partie données via son objet Database. Cet objet est à la racine du DDL (Langage de définition de données) et du DML (Langage de manipulation de données) sous DAO. C'est à partir de ce même objet Database que l'on va créer les tables, les requêtes, les relations et manipuler les données (Insert, Update, Delete).

Comme il a été écrit plus haut, un objet database peut être instancié depuis un moteur de base de données (DBEngine) ou depuis un espace de travail (Workspace) à l'aide des méthodes CreateDatabase et OpenDatabase. Ceci peut être fait de manière explicite :

 
Sélectionnez

Dim oDb As DAO.Database
Set oDb=DBEngine.CreateDatabase (…)

Ou de manière implicite :

 
Sélectionnez

Dim oDb As DAO.Database
Set oDb=CreateDatabase(…)

Toutefois, dans la majorité des cas, vous souhaitez utiliser la base de données courante ouverte dans Access. Il vous suffit alors d'utiliser les méthodes Application.CurrentDb ou Application.CodeDb.

3.3.1.1. La méthode CurrentDb

Cette méthode fournie par l'objet Access.Application retourne une variable de type Database correspondant à la base de données actuellement ouverte dans le logiciel Microsoft Access. La méthode Currentdb crée une nouvelle instance de la base de données à chaque appel. Aussi, vous devez récupérer son résultat dans une variable objet de type Database pour pouvoir l'exploiter.

Voici ce qu'il ne faut pas utiliser :

 
Sélectionnez

Dim Tbl As DAO.TableDef, Tbl2 As DAO.TableDef
Set Tbl = CurrentDb.TableDefs("Table1")
Set Tbl2 = CurrentDb.TableDefs("Table2")

En effet, ce code fait un double appel à Currentdb ce qui provoque une double instanciation de la base de données courante.

 
Sélectionnez

Dim Tbl As DAO.TableDef, Tbl2 As DAO.TableDef
Dim Db as DAO.Database
Set Db=CurrentDb
Set Tbl = Db.TableDefs("Table1")
Set Tbl2 = Db.TableDefs("Table2")

Ici, une seule instance de l'objet database est utilisée.

La propriété DBEngine.Workspaces(0).Databases(0) représente aussi la base de données ouverte. Toutefois, cette méthode est déconseillée car elle ne crée pas une nouvelle instance de l'objet Database. Au contraire, son résultat peut être considéré comme un pointeur vers la base de données. Aussi, dans un environnement multi-utilisateurs, ceci peut engendrer des conflits d'accès aux données. Privilégiez donc la méthode CurrentDb.

3.3.1.2. La méthode CodeDb

Contrairement à la méthode CurrentDb qui renvoie la base de données active, cette méthode retourne un objet Database correspondant à la base de données qui contient le code en cours d'exécution .
CodeDb est à utiliser lors de la création de compléments ou de base de données bibliothèques. En effet la base Add-in ne sera pas la base active. La méthode CurrentDb ne retournera donc pas le bon objet Database. Tout comme CurrentDb, Codedb retourne une nouvelle instance de l'objet Database. Vous devez donc récupérer son résultat dans un objet Database pour pouvoir l'exploiter.

 
Sélectionnez

Dim Tbl As DAO.TableDef, Tbl2 As DAO.TableDef
Dim Db as DAO.Database
Set Db=CodeDb
Set Tbl = Db.TableDefs("Table1")
Set Tbl2 = Db.TableDefs("Table2")

3.3.2. Liste des propriétés

3.3.2.1. CollatingOrder

Type : Long

Il s'agit de la méthode utilisée par le moteur pour comparer les données de type texte.

Les valeurs possibles sont :

Constante Signification
dbSortGeneral Général (Français, anglais ...)
dbSortArabic Arabe
dbSortChineseSimplified Chinois simplifié
dbSortChineseTraditional Chinois traditionnel
dbSortCyrillic Russe
dbSortCzech Tchèque
dbSortDutch Néerlandais
dbSortGreek Grec
dbSortHebrew Hébreu
dbSortHungarian Hongrois
dbSortIcelandic Islandais
dbSortJapanese Japonais
dbSortKorean Coréen
dbSortNeutral Neutre
dbSortNorwDan Norvégien et danois
dbSortPDXIntl Paradox International
dbSortPDXNor Paradox norvégien ou danois
dbSortPDXSwe Paradox suédois ou finnois
dbSortPolish Polonais
dbSortSlovenian Slovène
dbSortSpanish Espagnol
dbSortSwedFin Suédois ou finnois
dbSortThai Thaï
dbSortTurkish Turc
dbSortUndefined Indéfini

3.3.2.2. Connect

Lecture Seule.

Type : String

La propriété Connect représente la chaîne de connexion utilisée à l'ouverture de l'objet Database. Lorsque que vous utilisez cette propriété sur une base au format Access, cette propriété est égale à "".

3.3.2.3. Containers

Type : Collection

Cette collection regroupe l'ensemble des objets de type container contenu dans la base de données. Il s'agit de l'ensemble des objets enregistrés dans la base de données. Vous y touverez par exemple des informations sur les formulaires, les états ...

Cette propriété vous est founie à titre d'information, en effet, un tutoriel entier pourrait lui être consacré.

3.3.2.4. Name

Lecture Seule.

Type : String

La propriété Name d'un objet Database retourne le nom de la base de données. Pour une base de données Access, il s'agit du nom du fichier mdb ainsi que le chemin d'accès 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 requêtes enregistrées dans la base de données.

Cette partie sera largement détaillée dans la section 4.7 L'objet QueryDef.

3.3.2.7. RecordsAffected

Lecture Seule.

Type : Long

La propriété RecordsAffected retourne le nombre d'enregistrements qui ont été affectés par le dernier ordre SQL de la méthode Execute. Cela permet de connaitre, par exemple, le nombre de lignes supprimées lors d'une requête Delete.

Exemple d'utilisation :

 
Sélectionnez

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 données.

Cette partie sera largement détaillée dans le chapitre 5 Accès aux données.

3.3.2.9. Relations

Type : Collection

La propriété Relations est une collection regroupant l'ensemble des relations présentes dans la base de données. Cette collection n'est utile que pour les SGBDR.

Cette partie sera largement détaillée dans la section 4.6 L'objet Relation.

3.3.2.10. TableDefs

Type : Collection

Cette collection regroupe l'ensemble des tables enregistrées dans la base de données. Dans le cas d'une base de données incluant des tables liées, il existe aussi un objet TableDef pour chaque table attachée.

Cette partie sera largement détaillée dans la section : 4.3 L'objet TableDef.

3.3.2.11. Transactions

Lecture Seule.

Type : Boolean

La propriété Transactions d'un objet Database indique si l'objet database supporte les transactions. Si oui, la valeur de la propriété est égale à True.
Dans le cas d'une base de données Access, cette valeur est fixée à True et les transactions sont disponibles via les objets Recordset Dynaset et Table.

3.3.2.12. Updatable

Lecture Seule.

Type : Boolean

Si cette propriété est égale à False, la base de données est protégée en écriture et vous ne pouvez modifier ni les données, ni la structure.

3.3.2.13. Version

Lecture Seule.

Type : String

Cette propriété retourne la version du moteur Jet utilisé pour créer la base de données. Dans le cas, d'une base de données Access au format 2000 ou ultérieur, cette propriété est égale à 4.0.

3.3.3. Liste des méthodes

3.3.3.1. Close

La méthode Close ferme la base de données. Toutefois, cela ne libère pas la mémoire alloué à l'objet database. Pour libérer la mémoire, vous devez affecter Nothing à la variable.

3.3.3.2. CreateProperty

La méthode CreateProperty crée et retourne un objet Property.

Syntaxe :

 
Sélectionnez

Set property = object.CreateProperty (name, type, value, DDL)

Nous reviendrons plus en détails sur les objets property dans le chapitre suivant.

3.3.3.3. CreateQueryDef

La méthode CreateQueryDef crée une nouvelle requête et retourne l'objet QueryDef correspondant. L'objet créé est automatiquement ajouté à la collection Database.QueryDefs.

Syntaxe :

 
Sélectionnez

Set querydef = Database.CreateQueryDef (name, sqltext)

L'argument name correspond au nom de la requête à créer. Celui ci doit être unique au sein de la collection QueryDefs. En affectant une chaine vide ("") à ce paramètre, vous créez un objet QueryDef temporaire qui ne sera pas ajouté à la collection QueryDefs. Dans ce cas, l'objet sera détruit à la fin de la procédure.

L'argument SQL est une chaîne de caractères contenant l'instruction SQL de la requête à créer. Il peut s'agir de requête de sélection, 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 méthode CreateRelation crée et retourne un objet Relation.

Syntaxe :

 
Sélectionnez

Set relation = database.CreateRelation (name, table, foreigntable, attributes)

Nous reviendrons plus en détails sur les objets Relation dans le chapitre suivant.

3.3.3.5. CreateTableDef

La méthode CreateTableDef crée et retourne un objet Tabledef. A ce stade, l'objet est seulement créé et n'est pas encore intégré à la base de données. Pour l'ajouter aux autres tables, vous devrez invoquer la méthode Append de la collection TableDefs.

Syntaxe :

 
Sélectionnez

Set tabledef = database.CreateTableDef (name, attributes, source, connect)

La création de table sera abordée en détails dans le chapitre suivant à la section 4.3 L'objet TableDef

3.3.3.6. Execute

Cette méthode execute un ordre SQL. Cette ordre SQL doit être une requête action (Insert, Update, Delete). Les requêtes de sélection sont déléguées aux objets Recordset. Une fois l'ordre SQL exécuté, il est possible de connaitre le nombre d'enregistrements qui ont été affectés par cet ordre grâce à la propriété RecordsAffected.

Exemple :

 
Sélectionnez

Dim Db as DAO.Database
Set Db=CurrentDb
Db.Execute ("DELETE FROM MaTable")

3.3.3.7. NewPassword

La méthode NewPassword permet de modifier le mot de passe système de la base de données.

Ne pas confondre le mot de passe système et le mot de passe utilisateur utilisé dans un groupe de travail. Le mot de passe système est celui définit dans le menu Outils/Sécurité/Définir le mot de passe de la base de données.

Exemple :

 
Sélectionnez

Dim Db as DAO.Database
Set Db=CurrentDb
Db.NewPassword "mdpancien","mdpnouveau"

3.3.3.8. OpenRecordset

La méthode OpenRecordset ouvre et retourne un objet Recordset (Curseur) permettant d'accéder aux données.
L'objet ainsi créé est automatiquement ajouté à la collection Recordsets.

Vous retrouverez cette méthode dans le chapitre 5 Accès aux données.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Liste de mes articles :
Tutoriel : La mise en forme conditionnelle sous Access
Tutoriel : Création et paramétrage dynamique de requêtes
Tutoriel : Ajouter un menu dans un formulaire
Tutoriel : Créer des rapports d'erreurs sous Access
Tutoriel : Découvrez les champs multi-valués sous Access 2007
Tutoriel : Présentation des champs pièces-jointes sous Access 2007
Tutoriel : Création de rubans personnalisés sous Microsoft Access 2007
Tutoriel : Gestion de favoris sous Access 2007

Cours : Définition et manipulation de données avec DAO
  

Copyright © 2005 WARIN Christophe. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.