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 :
DBEngine.BeginTrans
3-1-3-2. CommitTrans▲
La méthode CommitTrans stoppe la transaction tout en enregistrant les données.
Exemple :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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
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 :
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 :
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 :
Dim
oDb As
DAO.Database
Set
oDb=
DBEngine.CreateDatabase
(
…)
Ou de manière implicite :
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 :
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.
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.
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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.