Vous êtes sur la page 1sur 21

Microsoft Access 2010

Access 2010 : Conventions et conception des tables


Complments au cours II

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010


Table des matires
1

Conventions pour les noms des objets et de variable .......................................................................... 3


1.1
Conventions utilises pour les noms des objets .............................................................................. 3
1.2
Conventions utilises pour les noms de formulaire et de contrle ................................................... 4
1.3
Conventions utilises pour les noms de variable ............................................................................ 4
2
Conception de vos tables...................................................................................................................... 6
2.1
Prvention des erreurs courantes ................................................................................................... 6
2.1.1
Problme 1 : Cration de champs composs .............................................................................. 6
2.1.2
Problme 2 : Inclusion de groupes rptitifs.............................................................................. 7
2.1.3
Problme 3 : Placement de plusieurs entits dans une mme table ............................................. 7
2.1.4
Problme 4 : Simplification exagre des tables ........................................................................ 8
2.1.5
Problme 5 : Segmentation des tables ....................................................................................... 8
2.1.6
Problme 6 : Stockage de valeurs calcules .............................................................................. 9
2.1.7
Problme 7 : Dfinition de proprits de liste de choix .............................................................. 9
2.1.8
Problme 8 : Dfinition de rgle de validation sans message d'erreur associ ........................... 10
2.1.9
Problme 9 : Mauvais usage des types de donnes .................................................................. 10
2.1.10
Techniques de conception conseilles ................................................................................ 14
2.2
Conclusion : Connaissez vos donnes et leur usage ..................................................................... 20

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010

Conventions pour les noms des objets et de variable

Dans toute application, cest une bonne ide que de prfixer les noms des objets et des
variables afin de signaler leur utilit dans les requtes ou dans le code. Ainsi, dans une
requte une clause FROM incluant le nom Clients ou Produits nindique pas si ce nom
concerne une table ou une requte ; un nom comme tblClients ou qryProducts est plus
parlant. De mme, une variable nomme Q ne renseigne pas beaucoup alors quune variable
nomme intQ indique que le type de la variable est de type Entier. Voici les prfixes de
dnomination utiliss dans les applications, avec leurs significations.

1.1 Conventions utilises pour les noms des objets


Type
dobjet
Table

Prfixe dobjet
tbl
tlkp
tvw

Requte

ztbl, zttbl ou
zztbl
qry
qlkp

Formulaire

Etat
(rapport)

qupd
qapp
qdel
qmak
qtot
qxtb
zqry, zqupd,
zqapp ou zqdel
frm
fpop
fdlg
fsub
zfrm ou zfdlg
rpt
rsub

Signification
Objet table
Table de consultation contenant des valeurs pour la cl
trangre dune autre table
Table contenant une vue locale de donnes provenant du
fichier de donnes partag
Table auxiliaire ou table systme pour lapplication
Requte de slection standard, en principe une source
denregistrements pour une feuille
Requte sur une table de consultation, en principe une
source denregistrements dune liste simple ou combine
Requte de mise jour
Requte dajout (insertion)
Requte de suppression
Requte de cration de table
Requte de totalisation
Requte de tableau crois dynamique
Requte employe par le code de lapplication
Formulaire de saisie de donnes
Formulaire pop-up
Formulaire bote de dialogue
Formulaire utilis comme sous-formulaire
Formulaire exemple ou formulaire systme, en principe
non affich lutilisateur
Etat affichant des donnes
Etat utilis comme sous-tat

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010

1.2 Conventions utilises pour les noms de formulaire et de


contrle
Prfixe
ckx
btn
opt
lbl
lbx
cbx
txt
tgb
gpx
tsp
mpe
sbr
spx
img
rft
bx
fsub
ln
og
ole

Objet
Case cocher (CheckBox)
Bouton de commande (Button)
Bouton doption (OptionButton)
Intitul (Label)
Zone de liste (ListBox)
Zone de liste modifiable (ComboBox)
Zone de texte (TextBox)
Bouton bascule (ToggleButton)
Cadre (GroupBox)
Contrle Onglet (TabStrip)
Multipage (MultiPage)
Barre de dfilement (ScrollBar)
Toupie (SpinButton)
Image (Image)
RefEdit (RefEdit)
Rectangle
sous-formulaire
Trait
Groupe doptions
Cadre dobjet dlimit ou non

1.3 Conventions utilises pour les noms de variable


Prfixe
bln
byt
cur
col
sng
dbl
dec
dte
sng
h
i
int
lng
obj
str
u
ulng
vnt
w

Type de variable
Boolen
Byte
Currency (montaire)
Collection (gnrique)
Rel simple
Rel double - Double prcision
Dcimal
Date (Heure)
Flottant (simple prcision)
Handle
Indice
Entier
Long
Objet (gnrique)
String (chane)
Quantit non signe
long non sign
Variant
Word (mot)

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010

Prfixe
rst
tdf
qdf
frm
rpt

Type de variable
Recordset
Dfinition de table
Dfinition de requte
Formulaire
Etat

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010

2 Conception de vos tables


Ltude consacre la construction d'applications de base de donnes ne serait complte si
elle ne prsentait pas les erreurs les plus communes, n'expliquait pas en quoi ce sont des
erreurs et ne montrait pas comment les corriger. Le prsent chapitre tudie aussi des
techniques de conception spcifiques Access qui vous permettront d'optimiser vos
applications.
Ce chapitre suppose que vous connaissiez dj les principes de conception de tables et de
relations dans Access ; il tudie plutt des techniques de conception spcifiques qui vous
aideront amliorer la structure de vos tables. En fait, vous pourrez appliquer nombre des
principes tudis dans ce chapitre la conception de n'importe quelle structure de base de
donnes relationnelle.

2.1 Prvention des erreurs courantes


Mme les dveloppeurs Access chevronns commettent parfois des erreurs de conception. Si
vous dveloppez des applications Access depuis un certain temps, vous devez savoir qu'une
petite erreur de conception risque d'tre coteuse aprs que vous avez conu des dizaines de
formulaires et d'tats et que vous devez implmenter une nouvelle fonctionnalit. Si vos
tables ont t bien conues, il est facile d'ajouter une nouvelle fonctionnalit. Si votre
conception a des lacunes, procder des modifications prend du temps et est donc coteux.
Cette premire section dcrit les 10 problmes les plus courants et montre comment les
prvenir.

2.1.1 Problme 1 : Cration de champs composs


Certains champs, surtout si vous avez import des donnes d'une autre source, peuvent
contenir des donnes qu'il faudrait subdiviser en plusieurs champs. Un problme trs courant
concerne l'emploi d'un champ adresse compos qui contient un numro d'immeuble, un nom
de rue, un code postal, etc. (parfois formats avec des retours chariot en vue d'une
impression globale sur une tiquette ou sur une enveloppe). Une autre erreur courante
consiste stocker dans un mme champ les nom et prnom d'une personne.
Ce genre de champ compos est trs bien pour un traitement de texte, mais pas pour une base
de donnes. Si le code postal est incorpor dans une longue chane, comment faire pour trier
les enregistrements par code postal ? Comment faire pour trouver les enregistrements relatifs
une certaine ville ? Comment faire des tris ou des recherches en fonction du nom de
famille si celui-ci fait partie d'une chane plus vaste ? Certes, vous pouvez employer une
recherche LIKE, mais c'est trs peu performant. Sans compter qu'il est impossible de crer
un index sur une portion de chane pour optimiser les performances.
Une structure classique d'enregistrement contenant des champs composs et suggre un
schma plus adapt pour les mmes donnes dans une table de base de donnes. Dans le
modle relationnel de la conception de bases de donnes, ce processus de subdivision des
champs composs porte le nom de dcomposition en valeurs atomiques.
Le schma amlior permet de faire des recherches et des indexations sur des valeurs
discrtes, sachant que vous pouvez recomposer les valeurs complexes via concatnation de
chanes. Bien videmment, votre conception finale dpendra de la manire dont votre
application doit utiliser les donnes. Certaines applications peuvent mme exiger encore plus
de granularit, par exemple pour faire du numro d'immeuble un champ spar ou pour
ajouter l'intitul d'une personne.
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010

2.1.2 Problme 2 : Inclusion de groupes rptitifs


Un groupe rptitif est un ensemble de colonnes qui apparaissent plusieurs fois dans une
dfinition de table. Cela signifie que le schma de la table inclut plusieurs colonnes ayant
toutes le mme genre de donnes. Prenons un groupe rptitif simple, savoir les cours
auxquels est inscrit un tudiant.
Les groupes rptitifs sont parfois utiles pour afficher ou analyser des donns. En fait, vous
verrez souvent des groupes rptitifs dans une feuille de calculs ou dans un tableau crois.
Cependant, ils sont affreux pour le stockage de donnes dans une base de donnes
relationnelle. Ainsi, comment faire pour connatre le nombre d'tudiants inscrits pour chaque
matire ? Si vous connaissez l'avance les noms des matires, vous pouvez rechercher les
lignes contenant une certaine matire dans l'un des modules puis totaliser les lignes. Mais
vous devriez faire une requte distincte pour chaque matire connue, puis faire une UNION
des rsultats pour avoir la rponse complte. De plus, si l'cole dcide d'ajouter un septime
module, il faut redessiner la table. Et si certains tudiants n'assistent qu' une partie des
modules, la table contiendra des lignes ayant des colonnes vides et inutilises, ce qui
gaspillera de l'espace dans la table.
Pour stocker correctement ce genre de donnes dans une table relationnelle, vous devez
dcroiser la grille et utiliser les noms de colonne du groupe rptitif comme valeurs.
Quand vous restructurez la table de cette faon, il est facile de savoir combien d'tudiants se
sont inscrits chaque matire :
SELECT Subject, Count(StudentlD) As SubjectCount FROM StudentRegistrations GROUP BY
Subject;

Si l'cole dcide d'ajouter une matire zro ou sept , point n'est besoin de modifier la
structure de la table car les nouveaux numros de cours sont tout simplement de nouvelles
valeurs.
Notez qu'un groupe rptitif ne consiste pas forcment en un seul champ qui se rpte
plusieurs fois. Il peut s'agir aussi d'un ensemble de champs qui se rptent dans un schma
de table. Cette structure de table non seulement contient des groupes rptitifs composs,
mais aussi prsente l'inconvnient d'inclure dans une mme table des champs relatifs
plusieurs entits (ce problme est trait la section qui suit).

2.1.3 Problme 3 : Placement de plusieurs entits dans une mme table


Chaque table devrait dcrire une et une seule entit. Un exemple d'erreur courante consiste
inclure le nom et l'adresse du client dans chaque ligne de la table Commandes au lieu de les
placer dans une table spcifique ; les donnes client forment en effet une entit part. Si
vous ne crez pas de table distincte pour les clients, vous rptez des donnes inutilement,
vous risquez d'introduire des erreurs et vous risquez de devoir modifier nombre de lignes
dans la table Commandes si vous voulez corriger l'orthographe du nom d'un client ou
modifier une adresse de facturation.
Voici un test simple pour dtecter des entits multiples dans une table : Puis-je modifier la
valeur de n'importe quel champ (autre que la cl primaire) de la table sans avoir modifier
une valeur similaire quelque part ailleurs dans la base de donnes ? Notez, toutefois, qu'il est
acceptable de dupliquer certaines valeurs vers des tables dpendantes selon vos rgles
mtier. Ainsi, un enregistrement LigneCommande pourrait inclure un duplicata du prix
indiqu dans la table Produits ; ce duplicata reprsente le prix au moment o a t passe la
commande. Ou encore, une commande pourrait exiger une adresse de livraison qui ne
correspond pas forcment l'adresse du client au moment de la cration de la commande.

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010

2.1.4 Problme 4 : Simplification exagre des tables


On peut aussi trop simplifier, ou trop normaliser , la structure d'une table. Vous avez cr
une table spare pour les adresses des clients, mais chaque client n'a qu'une seule adresse !
Vous avez cr une table spare pour les catgories ou types , mais cette table ne
contient que le seul champ ! Peut-tre avez-vous trop simplifi le schma de votre table.
Mfiez-vous systmatiquement des tables qui contiennent un seul champ, ou qui contiennent
une cl primaire NumroAuto plus un seul champ. quoi bon mettre une entit dans une
table spcifique si elle ne contient qu'un champ descriptif ? Sauf si vous dmontrez son
utilit ; mais l'emploi d'une table spare offre la possibilit d'ajouter ultrieurement de
nouvelles informations.
Si, par exemple, vous avez deux ensembles d'adresses et de numros de tlphone. S'agit-il
d'un groupe rptitif non valide ? Si l'application ne grera jamais plus de deux adresses
(bureau et domicile) et que la plupart des contacts ont une adresse professionnelle et une
adresse prive, cette structure est plus efficace que de crer une table d'adresses spare ; en
effet, l'application pourra extraire les noms et les adresses sans tre oblige de faire la
jointure des deux tables. Une solution serait de grer un nombre illimit d'adresses et de
numros de tlphone pour chaque contact. Faut-il laisser les numros de tlphone dans la
table Contacts au cas o vous n'avez aucune adresse pour un contact ? Faut-il que tous les
numros de tlphone soient dans une table part ? Il est probablement judicieux de laisser
le champ relatif au tlphone mobile dans la table Contacts (rares sont les personnes qui ont
plus d'un seul numro de mobile).
Quelle est la bonne rponse ? a dpend. La conclusion est que vous devez bien comprendre
la nature des donnes stocker dans vos tables et la faon dont ces donnes seront utilises.
Ne crez pas de table spare si cela vous obligera joindre systmatiquement deux ou
plusieurs tables pour rsoudre la plupart des problmes.
Crez une table spare quand vous risquez d'avoir stocker un nombre variable
d'lments de mme nature (par exemple, des adresses et des numros de tlphone) pour
une autre table.
Crez une table spare qui contienne les groupes rptitifs sous forme d'enregistrements
si vous devez effectuer une analyse sur les membres des groupes (par exemple, pour
compter les numros de tlphone ayant un mme indicatif rgional).

2.1.5 Problme 5 : Segmentation des tables


Quand vous manipulez de gros volumes de donnes dans une feuille de calculs, vous tes
souvent forc de segmenter vos donnes d'une faon ou d'une autre. Vous pourriez
segmenter vos donnes actives en fonction de la date (par exemple, classer les ventes selon
les mois), de la rgion, du service ou de tout autre critre naturel.
La segmentation des donnes d'une application de base de donnes est une mauvaise ide.
Primo, vous devrez soit crer des requtes, des formulaires et des tats spars pour modifier
et afficher les donnes segmentes, soit crire du code pour charger dynamiquement le
recordset dsir partir du bon segment. Secundo, si vous voulez analyser des donnes
tales sur plusieurs segments (par exemple, analyser les ventes annuelles partir de
plusieurs fichiers mensuels), vous devrez employer une requte d'union pour collecter les
donnes de multiples segments ; or, les requtes d'union peuvent tre trs lentes.
Bien que vous soyez limit un total de 2 Go dans un fichier JET .accdb, cela permet quand
mme de stocker facilement, plusieurs centaines de milliers d'enregistrements. Vous pouvez
aussi placer une trs grosse table dans un fichier .accdb spcifique, dfinir les autres tables
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010


dans un autre fichier .accdb, puis employer des tables lies dans votre application pour
regrouper les donnes. Si, pour stocker vos donnes, vous utilisez une version de SQL
Server autre que MSDE (Microsoft SQL Server Desktop Engine) qui est lui aussi limit un
total de 2 Go, vous n'tes limit que par l'espace disque disponible sur le serveur.
Vous pourriez avancer que les tables segmentes facilitent la protection des donnes, les
utilisateurs n'ayant accs qu'aux segments sur lesquels ils ont l'autorit. Cependant, mme si
toutes les donnes sont dans une mme et grosse table, vous pouvez rsoudre ce problme en
crant des requtes With OWNERACCESS qui filtrent les enregistrements dans Access, ou
alors en dfinissant des vues scurises dans SQL Server.
Donc, exception faite des tables contenant des historiques, pour une application Access il
n'est point judicieux de segmenter vos donnes actives pour en faire des tables spares.
Bien videmment, vous devez dfinir des index sur les champs susceptibles d'tre employs
par votre application pour filtrer les donnes pour une tche ou pour un utilisateur
spcifique. Par exemple, si certains utilisateurs doivent manipuler uniquement les donnes
de leur propre service, il faut dfinir un index sur le champ Service.

2.1.6 Problme 6 : Stockage de valeurs calcules


Ne stockez pas de valeurs calcules dans vos tables. Mieux vaut faire les calculs l'aide de
requtes, car Access ne fournit dans son moteur de base de donnes aucun mcanisme
permettant de grer automatiquement des valeurs calcules. Le test simple des entits
composes s'applique ici aussi. Si la modification d'une valeur de champ implique qu'il faille
aussi modifier un champ dpendant, alors le second champ est probablement un champ
calcul.
Notez, toutefois, que l'inclusion d'une valeur calcule peut tre justifie par des raisons de
performance (par exemple, quand on veut grer le total des articles en stock calcul partir
de milliers d'enregistrements de mouvement de stock). Planifiez soigneusement une telle
valeur calcule. Dans les formulaires que vous fournissez pour mettre jour les autres
champs du calcul, crivez du code qui recalcule la valeur et l'enregistre. Vous pourriez aussi
tre oblig d'crire du code de vrification que l'utilisateur excutera priodiquement pour
contrler que les valeurs calcules stockes correspondent aux valeurs des champs impliqus
dans le calcul. Sachez que, si vous permettez que l'on accde vos tables autrement que par
le code de votre application, les utilisateurs pourraient modifier des valeurs impliques dans
le calcul et donc fausser le rsultat de la valeur calcule.

2.1.7 Problme 7 : Dfinition de proprits de liste de choix


Access pour Windows 95 introduisait la possibilit de dfinir des proprits de liste de choix
(lookup) pour les champs, lesquelles permettent de prdfinir les modalits d'affichage du
champ dans une feuille de donnes, un formulaire ou un tat. Par exemple, si vous avez dans
une table Employs un champ service_FK qui contient la cl trangre du service o
travaille l'employ, vous pouvez afficher le nom du service au lieu du code quand vous
examinez les donnes. Si vous affichez un champ Oui/ Non, vous pouvez fournir une liste
droulante qui affiche factur et non factur au lieu de oui et non ou de vrai
et faux . Lemploi d'une liste de choix (liste simple ou combine, place sur un
formulaire, permettant de dfinir une cl trangre partir des valeurs de cl primaire d'une
table lie) peut s'avrer judicieux l'occasion. Ainsi, quand vous ouvrez le formulaire
frmOrders de l'application Gestion du stock (Inventory.accdb), vous voyez des listes
combines pour Customer et Tax Status. Nanmoins, j'vite de dfinir des proprits de liste
de choix pour les champs de mes tables quand la valeur recherche n'est pas la cl
trangre.

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

Microsoft Access 2010


Une liste de choix masque la valeur sous-jacente effective pour les tris et les recherches. Le
problme, bien videmment, est qu'Access fait sa recherche sur l'ID numrique du client
(auquel est li le combo) et non sur ce qui est affich dans le contrle. Par consquent, il n'y
a pas de valeur numrique commenant par une lettre. Naturellement, vous pouvez
rexcuter la commande Rechercher avec l'option Rechercher champs comme formats.
Vous trouvez alors les enregistrements dsirs, mais Access fait la recherche sur les valeurs
consultes et non sur les valeurs relles du champ. Pour peu que vous ayez dj fait une
recherche sur une trs grosse table en utilisant l'option Rechercher champs comme formats,
vous savez que cette option est trs lente et inefficace.
Enfin, si vous avez protg vos donnes, l'emploi d'une liste de choix vous oblige accorder
des permissions non seulement sur la source d'enregistrements du formulaire mais aussi sur
la source d'enregistrements de chaque combo. Si vous utilisez une requte With
OWNERACCESS comme source d'enregistrements, les filtres et les tris choueront car la
jointure masque requise par le filtrage ou le tri sur un contrle liste de choix n'utilise pas
directement la requte.

2.1.8 Problme 8 : Dfinition de rgle de validation sans message


d'erreur associ
La possibilit de dfinir des rgles de validation tant pour les champs que pour les tables
d'une base de donnes Access est une fonctionnalit super. Cependant, si vous spcifiez une
rgle de validation mais pas de message d'erreur, Access gnre un vilain message sibyllin
que vos utilisateurs risquent de ne pas comprendre. L'utilisateur qui voit apparatre ce genre
de message risque fort d'tre drout et de ne pas comprendre o est l'erreur. moins que
vous n'aimiez recevoir des tonnes d'appel au secours, je vous recommande de spcifier
systmatiquement un message personnalis chaque fois que vous dfinissez une rgle de
validation. Bien videmment, faites attention crire un message qui soit trs clair pour vos
utilisateurs. Un message tel que Vous avez tap une valeur invalide ne rsoudra pas le
problme !

2.1.9 Problme 9 : Mauvais usage des types de donnes


La conception des tables de votre application reprsente un sacr dfi. Vous devez non
seulement identifier l'entit dcrite par chaque table, les attributs (champs) dfinissant
chaque entit et les relations entre les entits, mais aussi slectionner le type de donnes
optimal pour chaque attribut.

2.1.9.1 Stockage des donnes textuelles


Pour les caractres, vous prenez normalement le type Texte. Vous pouvez dfinir la longueur
maximale d'un champ Texte via la proprit Taille du champ. N'utilisez le type Mmo que
pour les longues chanes susceptibles de faire plus de 255 caractres.
Le type Mmo prsente quelques limitations majeures :
Les dernires versions d'Access permettent d'indexer un champ Mmo, mais Access
n'indexe que les 255 premiers caractres.
Vous ne pouvez pas employer de champ Mmo dans une requte d'union.
Si vous incluez un champ Mmo dans une requte de totalisation (agrgation) et utilisez
le champ dans la clause Group By, Access n'affiche que les 255 premiers caractres du
champ dans le rsultat de la requte.
Les contrles de formulaire et d'tat d'une application Access n'affichent que les 65 535
premiers caractres d'un champ Mmo.
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

10

Microsoft Access 2010


Si vous n'avez pas install la dernire version du moteur de base de donnes JET (SP 8
ou version ultrieure), Access bien souvent tronque les champs Mmo 256 caractres
quand il importe ou exporte depuis ou vers Excel. Pour obtenir la dernire version de
JET, utilisez Windows Update.
Le type Lien hypertexte permet de stocker un lien, simple ou complexe, vers un fichier ou
document externe. En interne, Lien hypertexte est un type Mmo dot d'un indicateur
spcial ; de sorte que les limitations du type Mmo s'appliquent aussi Lien hypertexte. Le
lien peut contenir un URL (Uniform Resource Locator) pointant vers un emplacement du
Web ou d'un intranet. Il peut aussi contenir le nom UNC (Universal Naming Convention)
d'un fichier d'un serveur du rseau local ou du disque local. Le lien peut pointer vers un
fichier HTML (Hypertext Markup Language) ou d'un format reconnu par une application
ActiveX de votre ordinateur.
Le lien lui-mme peut avoir quatre composants :
Un descripteur facultatif qu'Access affiche dans le champ quand vous n'tes pas en train de
modifier le lien. Le descripteur peut commencer par n'importe quel caractre autre que le
signe dise (#) et doit se terminer par un signe dise. Si vous omettez le descripteur, l'adresse
du lien doit commencer par un signe dise.
Ladresse du lien exprime soit sous forme d'URL (commenant par un nom de protocole
Internet reconnu tel que http: ou ftp:), soit dans le format UNC (emplacement de fichier du
genre \\serveur\partage\chemin\fichier). Si vous omettez la partie descripteur, Access affiche
l'adresse du lien dans le champ. Terminez l'adresse du lien par un signe dise (#).
Une sous-adresse facultative qui spcifie un emplacement nomm (par exemple, une plage
de cellules dans une feuille Excel ou un signet dans un document Word) l'intrieur du
fichier. Sparez la sous-adresse de la bulle d'aide par un signe dise (#). Si vous omettez la
sous-adresse, il faut quand mme taper le signe dise pour dfinir une bulle d'aide.
Une info bulle facultative qui apparat quand vous promenez le pointeur de souris sur le lien
hypertexte.

2.1.9.2 Stockage des donnes numriques


Quand vous slectionnez le type Numrique, faites trs attention ce que vous prenez pour
la proprit Taille du champ car votre choix conditionne la prcision ainsi que la longueur.
(Par exemple, les nombres entiers n'ont pas de dcimales.).
Le type NumroAuto est spcialement conu pour la gnration automatique de valeurs de
cl primaire. Selon les valeurs des proprits Taille du champ et Nouvelles valeurs d'un
champ NumroAuto, vous pouvez faire en sorte qu'Access cre un entier long squentiel ou
alatoire. Une table ne peut contenir qu'un seul champ NumroAuto. Si vous en dfinissez
plus d'un, Access affiche un message d'erreur quand vous essayez d'enregistrer la table.
Les types Rel simple et Rel double utilisent un format de stockage interne, appel virgule
flottante, capable de grer des nombres trs gros ou trs petits, mais quelque peu imprcis. Si
le nombre stocker contient plus de 7 chiffres significatifs pour Rel simple ou plus de 15
chiffres significatifs pour Rel double, le nombre sera arrondi. Par exemple, si vous essayez
de stocker 10 234 567 dans un rel simple, la valeur rellement stocke sera 10 234 570. De
mme, Access stocke 10,234567 comme 10,23457 dans un rel simple. Si vous avez besoin
d'une prcision dcimale absolue, prenez plutt Dcimal ou Montaire.
En outre, les nombres en virgule flottante stockent la partie dcimale du nombre en tant que
somme de puissances ngatives de deux. C'est--dire que le premier bit droite de la virgule
est 0.5, le second bit est 0.25, le troisime bit est 0.125, etc. Vous avez plus de risques
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

11

Microsoft Access 2010


d'avoir un nombre dcimal imprcis avec le type Rel simple, car il a un maximum de 24 bits
uniquement (1 bit sert pour le signe et 7 bits servent pour l'exposant) pour rsoudre une
valeur dcimale prcise. En outre, vous avez plus de risques d'avoir une erreur de prcision
quand vous multipliez deux valeurs dcimales.
Les nombres virgule flottante sont particulirement vilains quand vous essayez de calculer
des nombres arrondis prcisment, par exemple un pourcentage de valeur montaire arrondi
aux centimes. En gnral, n'utilisez Rel simple et Rel double que dans les applications
scientifiques ou dans les applications qui grent des nombres trs gros ou trs petits.
Utilisez le type Montaire ou Dcimal pour avoir une valeur prcise (jusqu' 4 dcimales
pour Montaire et 28 dcimales pour Dcimal). Le type Montaire sert gnralement pour
les valeurs montaires, mais vous pouvez l'employer pour tous les nombres pour lesquels
vous avez besoin de 4 dcimales exactement.
Ce qui fait la prcision de Montaire et Dcimal, c'est qu'Access stocke l'ensemble du
nombre sous forme d'entier mais avec un nombre invariable de chiffres dcimaux, et non
binaires, droite de la virgule. Ainsi, Access stocke 1,131212 dans un champ Dcimal ayant
l'chelle 12 et la prcision 8 sous la forme de la valeur entire 000113121200. Access
mmorise le fait que la partie dcimale occupe 8 chiffres en partant de la droite et le
processeur mathmatique (en fait, un composant de Windows) procde l'ajustement requis
quand vous multipliez OU divisez des valeurs dcimales.
Le type Oui/Non est en fait un champ Octet. Servez-vous de ce type pour grer des valeurs
boolennes (vrai ou faux). Ce type est particulirement utile pour marquer des factures
comme payes ou non payes, ou pour marquer des commandes comme remplies ou non
remplies. Quand un champ Oui/Non contient un zro, Access interprte la valeur comme
tant Faux ou Non. Quand un champ Oui/Non ne contient pas zro, Access interprte le plus
souvent la valeur comme tant Vrai ou Oui. En fait, vous pouvez tester sur Vrai n'importe
quel champ numrique dans une requte, celle-ci retournant alors tous les enregistrements
qui ont une valeur non nulle dans le champ. Si vous assignez Vrai ou Oui un champ
Oui/Non, Access positionne tous les bits de l'octet. (Tous les bits positionns dans un champ
Octet, cela donne la valeur numrique -1.) Si vous assignez Faux ou Non un champ
Oui/Non, Access met tous les bits O.

2.1.9.3 Stockage des dates et heures


Le type Date/Heure est utile pour les donnes de date et d'heure et permet, en outre, de faire
des calculs en secondes, minutes, heures, jours, mois ou annes. En interne, le type
Date/Heure est un nombre Rel double. La partie entire est le nombre de jours depuis le 30
dcembre 1899 (les valeurs ngatives reprsentent des dates antrieures), alors que la partie
dcimale est une fraction de jour prcise jusqu'aux secondes. Quand vous stockez une valeur
d'heure dans un champ Date/Heure, la partie entire vaut 0 et la partie dcimale contient
l'heure. Ainsi, Access stocke la valeur 12:00 en tant que 0.5.
Bien videmment, Access n'affiche jamais dans l'interface utilisateur la valeur numrique
sous-jacente un champ Date/Heure. La proprit Format du champ vous permet de
contrler la portion de la valeur affiche par Access. Si vous ne spcifiez pas de format,
Access affiche la valeur Date/Heure en utilisant le format Date courte dfini dans les options
rgionales du panneau de configuration Windows. Nombre d'utilisateurs croient que ce qu'ils
voient dans l'interface est ce qui est vritablement stock dans le champ. Access stocke
systmatiquement une valeur Date/Heure mme si l'application n'affiche, par exemple, que le
mois et l'anne.
Si vous ne limitez pas les saisies de l'utilisateur l'aide d'un masque de saisie, l'utilisateur
peut entrer une date et une heure dans un champ qui n'affiche que la partie date. Si vous ne
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

12

Microsoft Access 2010


contrlez pas les saisies de l'utilisateur, vous risquez d'obtenir des rsultats errons quand
vous crez une requte (ou une chane de recherche dans le code) qui n'inclut des critres de
recherche que pour des valeurs date.
Quand vous avez compris le format interne du type Date/Heure, vous pouvez faire une
soustraction entre deux valeurs Date/Heure pour connatre l'intervalle sparant les deux
valeurs. (Vous pouvez aussi employer la fonction DateDiff, mais la soustraction est plus
efficace.)
Vous pouvez aussi ajouter des valeurs Date/Heure contenant une partie heure pour calculer
une dure totale ; mais sachez que, si le total fait plus de 24 heures, la dure totale dborde
sur la partie date de la valeur Date/Heure. Ainsi, ajouter 9 heures et 4 heures donne 13
heures ; mais ajouter 14,5 heures et 16 heures donne 1 jour et 6,5 heures (ce qui quivaut
1er dcembre 1899 6:30). Cependant, comme vous savez que la reprsentation interne de
Date/Heure est des jours et des fractions de jour, vous pouvez ajouter une srie de dures
coules puis multiplier par 24 (nombre d'heures dans une journe) pour obtenir la dure
totale coule, exprime en heures et fractions d'heure.
Les oprations arithmtiques sur les valeurs Date/Heure obissent aux rgles que voici :
Laddition ou la soustraction de deux valeurs Date/Heure donne une valeur Date/Heure.
Laddition ou la soustraction entre un nombre et une valeur Date/Heure donne une valeur
Date/Heure. Ainsi, vous pouvez ajouter 1 aujourd'hui pour calculer demain ou
bien soustraire la partie entire d'une valeur Date/ Heure (en utilisant la fonction Int) de
cette mme valeur pour connatre la partie heure.
La multiplication ou la division d'une valeur Date/Heure par un nombre donne une valeur
Rel double.

2.1.9.4 Stockage des objets


Le type Objet OLE (Object Linking and Embedding) permet de stocker des donnes
complexes du genre image, graphique ou son ; ces objets peuvent tre modifis ou affichs
via liaison dynamique avec une autre application Windows. Ainsi, Access peut stocker un
document Word, une feuille Excel, une diapo PowerPoint, un fichier sonore (.wav), un
fichier vido (.avi) ou des images cres par Paint ou par Draw.
Sachez, toutefois, qu'Access stocke non seulement l'objet mais aussi une figurine
(thumbnail) de l'objet au format bitmap, et ce pour pouvoir afficher une reprsentation de
l'objet dans un cadre d'objet li plac sur un formulaire ou sur un tat. Au final, le stockage
d'images compactes dans des formats comme JPEG ou GIF peut exiger beaucoup plus
d'espace dans votre fichier .accdb que la taille du fichier original, compte tenu de la place
prise par la figurine bitmap.
En outre, si vous essayez d'afficher un champ Objet OLE sur une page Web, votre
navigateur ne peut pas grer le format interne du type Objet OLE. Pour rsoudre ces deux
problmes, vous pouvez employer un champ Texte ou Lien hypertexte pour stocker un lien
vers l'objet OLE. Pour afficher un objet image stock en tant que lien textuel sur un
formulaire ou sur un tat, vous pouvez crire du code qui charge le chemin de l'objet dans un
contrle image.
En rsum, tenez compte des cinq points suivants pour choisir un type de donnes :
1. Comprenez bien les limitations du type Mmo quand vous triez sur un champ Mmo,
quand vous utilisez un champ Mmo dans des requtes d'union ou de totalisation, et
quand vous exportez un champ Mmo avant de slectionner le type Mmo pour
stocker du texte susceptible de faire plus de 255 caractres.
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

13

Microsoft Access 2010


2. N'employez pas le type Rel simple ou Rel double si votre application exige des
calculs prcis ; prenez plutt Montaire ou Dcimal.
3. Sachez que SQL Server gre diffremment le type Oui/Non si vous avez migrer vos
donnes.
4. Connaissez le format de stockage du type Date/Heure de faon crer des critres de
recherche corrects et faire des calculs de date et d'heure justes.
5. Utilisez des liens vers les objets externes au lieu de stocker ces objets dans vos tables.

2.1.9.5 Problme 10 : Mauvaise dnomination des champs


Access offre beaucoup de souplesse en matire de noms de champ. Un nom de champ peut
faire 64 caractres et inclure n'importe quelle combinaison de lettres, de chiffres, d'espaces et
de symboles spciaux autres que le point (.), le point d'exclamation (!), l'accent grave (`) et
les crochets ([ ]) ; cependant, le nom ne doit pas commencer par un espace, ni contenir de
caractres de contrle (valeurs ANSI 0 31).
Voir document Access_BD-Charte de terminologie_rev0.pdf .

2.1.10

Techniques de conception conseilles

Comme le montre la section prcdente, en vitant les erreurs de conception vous gagnerez
du temps au niveau du dveloppement ou de la maintenance de votre application. Mais vous
pouvez aussi optimiser grandement le fonctionnement de votre application et simplifier le
travail de vos utilisateurs en employant des techniques de conception supplmentaires pour
construire vos tables Access.

2.1.10.1

Prohibez les valeurs textuelles qui sont la fois nulles et vides

Les bases de donnes relationnelles reconnaissent dans les champs une valeur spciale, dite
Null, qui indique une valeur inconnue. En comparaison, vous pouvez initialiser les champs
Texte, Mmo et Lien hypertexte sur une chane vide qui indique que la valeur du champ est
connue mais que le champ est vide.
En quoi est-ce important de faire la diffrence entre Nulls (valeurs inconnues) et chanes
vides ? Voici un exemple : supposez que vous ayez une base de donnes qui stocke les
rsultats d'une enqute sur les prfrences en matire d'auto. Pour les questionnaires sur
lesquels il n'y a pas de rponse une question concernant la couleur, il est judicieux de
stocker un Null. Il ne faut pas faire des recherches sur une rponse inconnue, ni inclure
l'enregistrement dans un calcul de total ou de moyenne.
En revanche, certaines personnes peuvent avoir rpondu peu importe la question sur la
couleur. Dans ce cas, vous avez une rponse connue pas de prfrence et ici une chane
vide pourrait s'imposer. Vous pouvez faire des recherches sur toutes les rponses peu
importe et inclure toutes ces rponses dans les totaux et moyennes.
Mais il ne faut pas permettre un champ Texte, Mmo ou Lien hypertexte d'tre la fois
vide (proprit Chane vide autorise = Oui) et Null (proprit Null interdit = Non et rien
dans la proprit Valide si), sauf si vous voulez vraiment pouvoir stocker soit une chane
vide, soit un Null. Linterface utilisateur dans Access affiche un Null et une chane vide (" ")
de la mme faon (les deux apparaissent sous forme de blanc) ; par consquent, autoriser les
deux risque de drouter l'utilisateur. En vrit, mieux vaut sans doute stocker pas de
prfrence que d'autoriser un Null ou une chane vide, car l'utilisateur ne pourra pas voir la
diffrence quand il regardera les donnes d'une feuille de donnes, d'un formulaire ou d'un
tat.

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

14

Microsoft Access 2010


Vous pouvez joindre des tables sur des chanes vides, sachant que deux chanes vides sont
considres comme gales dans une comparaison. Nanmoins, pour les champs Texte,
Mmo et Lien hypertexte, vrifiez que la proprit Chane vide autorise vaut Oui pour que
les utilisateurs puissent entrer des chanes vides. Autrement, Access convertit une chane
vide ou une chane ne contenant que des espaces en un Null avant de stocker la valeur. En
fait, Access supprime tous les espaces de dbut ou de fin dans une chane avant de la stocker.
Donc, si vous tapez uniquement des espaces dans un champ puis sauvegardez
l'enregistrement, Access rduit la chane la longueur zro et la stocke sous forme de Null si
Chane vide autorise vaut Non. Si en plus vous rglez la proprit Null interdit d'un champ
textuel sur Oui, Access stocke une chane vide si l'utilisateur entre dans le champ soit ""
(deux guillemets colls l'un contre l'autre), soit uniquement des espaces.
Les Nulls ont des proprits spciales. Une valeur Null ne peut pas tre gale une autre
valeur, pas mme un autre Null. Par consquent, vous ne pouvez pas joindre deux tables
sur des valeurs Null. En outre, la question A est-il gal B ? quand A, B ou les deux
contiennent un Null ne peut jamais avoir la rponse oui . La rponse, strictement parlant,
est je ne sais pas . De mme, la rponse la question A est-il diffrent de B ? est
encore je ne sais pas . Enfin, les valeurs Null ne participent pas aux calculs d'agrgation
impliquant des fonctions comme Sum ou Avg. Pour savoir si une valeur est un Null,
comparez-la au mot rserv NULL ou testez-la via la fonction prdfinie IsNull.

2.1.10.2

Utilisez une rgle de validation au lieu de Null interdit = Oui

Exploitez plutt les fonctionnalits de validation d'Access pour assurer que les utilisateurs
fournissent des valeurs valides pour les champs de vos tables. Si vous voulez forcer
l'utilisateur saisir une valeur mais que vous n'avez point besoin de faire d'autres validations,
vous pourriez tre tent de rgler la proprit Null interdit du champ sur Oui. Cependant,
quand l'utilisateur ne fournit pas de valeur ou essaie d'effacer une valeur obligatoire, Access
affiche un message sibyllin.
Au lieu de rgler la proprit Null interdit sur Oui, rglez la proprit Valide si sur Est Pas
Null et incluez un message idoine dans la proprit Message si erreur. Quand vous laissez la
proprit Null interdit sur Non et que vous dfinissez une rgle de validation Est Pas Null,
Access affichera votre message personnalis.
Notez qu'il faut laisser la proprit Null interdit sur Non, car Access contrle la proprit
Null interdit avant de tester la rgle de validation.

2.1.10.3
Ne dfinissez jamais de sous-feuilles donnes pour les tables
(ou les requtes)
Rglez la proprit Sous-feuille donnes nom sur [Aucune] dans la fentre Proprits de la
table de toutes les tables et laissez la proprit vide dans la fentre Proprits de la requte
de toutes les requtes. Si vous dfinissez une sous-feuille donnes, Access lit aussi les
enregistrements de la sous-feuille donnes quand vous ouvrez la table ou la requte. Cela
peut impacter trs ngativement les performances si la table est lie travers un rseau.
Si vous utilisez des tables lies et que la base de donnes contenant les donnes n'a pas de
relations dfinies, dans certains cas Access analyse toutes les autres tables pour rechercher
une table lie en fonction des noms de cl. Cette analyse peut durer de quelques secondes
une minute avant qu'Access abandonne et affiche finalement les donnes.
En outre, si vous avez protg vos tables, tous les utilisateurs doivent avoir des permissions
sur la (les) table(s) affiche(s) dans la feuille de donnes principale ainsi que sur toutes les
tables de chaque sous-feuille donnes.
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

15

Microsoft Access 2010

2.1.10.4
Sachez que l'intgrit rfrentielle cre des index
supplmentaires
Quand vous concevez vos tables, utilisez systmatiquement la fonctionnalit d'intgrit
rfrentielle d'Access pour garantir la mise en uvre des relations entre vos tables. Sachez,
toutefois, qu'Access cre systmatiquement un index systme masqu sur la (les) cl(s)
trangre(s) de la table dpendante (il en a besoin pour pouvoir appliquer la rgle
d'intgrit). En outre, cet index supplmentaire compte pour le maximum de 32 index par
table.
Access n'affiche pas ces index supplmentaires dans la fentre Indexes de la vue Cration
d'une table. La seule faon de dcouvrir ces index est d'examiner la collection Indexes de la
table via Visual Basic.
Vous vous dites peut-tre : Comme je ne peux pas voir l'index masqu, je pourrais peuttre dfinir l'index dans le mode Cration de la table. Est-ce que cela cre un index superflu
dans ma base de donnes et gaspille de l'espace et des ressources ? Oui, cela cre une autre
dfinition d'index (qui compte pour le total de 32 index par table) ; mais Access dtecte la
prsence de deux index ayant les mmes attributs, de sorte que l'index doublon est en fait
un alias vers l'index physique rel. Access consomme un peu d'espace pour la dfinition
d'index, mais il ne gaspille ni espace ni ressources crer un autre index physique. Pour
supprimer rellement l'index, il faudrait supprimer tant l'index que vous voyez dans la vue
Cration de la table que la rgle d'intgrit rfrentielle.

2.1.10.5

Prohibez les cls primaires artificielles dans les tables

Lune des rgles essentielles en matire de conception de base de donnes est que chaque
table doit avoir une cl primaire qui identifie chaque enregistrement de manire unique. Si
vous respectez strictement la thorie relationnelle, vous rassemblez tous les attributs
(champs) d'une entit (table) puis vous identifiez un ou plusieurs attributs qui sont
potentiellement uniques pour chaque enregistrement (on parle ici de cls candidates). Partant
de l'ensemble des cls candidates, choisissez la cl la plus simple (tenant sur un seul champ
si possible) comme cl primaire.
Dans le monde rel, il est souvent difficile voire impossible d'identifier une cl candidate
simple. Ainsi, la table client typique pourrait contenir le prnom, le nom, l'adresse, la ville, le
code postal, le pays, le numro de tlphone, le numro de fax et l'adresse mail. Il est certain
que la combinaison du nom et du prnom pourrait tre une cl candidate ; mais, ds que vous
tombez sur deux personnes diffrentes ayant le mme nom, la cl candidate n'est plus bonne.
Vous pourriez essayer d'ajouter un autre champ, tel l'adresse mail ; mais, ici aussi, cela ne
marche pas pour peu que qu'un client n'ait pas d'adresse mail.
Maints dveloppeurs Access jettent tout simplement l'ponge, placent un champ
NumroAuto dans la table et s'en servent comme cl primaire. J'utilisais systmatiquement
NumroAuto de cette faon, mais j'ai constat que se limiter NumroAuto pour dfinir une
cl primaire a pour effet de crer une valeur dpourvue de signification (chaque champ d'une
table devrait avoir une signification et tre directement li l'entit de la table) ; en fait, c'est
de la pure paresse. Comme cette cl artificielle n'a pas de signification, la tentation est
grande de ne pas l'afficher du tout l'utilisateur.
Les sections suivantes traitent de certains autres piges qu'implique l'emploi de cls
primaires artificielles.

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

16

Microsoft Access 2010

2.1.10.6
Prohibez les cls primaires artificielles dans les tables de
consultation
Comme mentionn la section Simplification exagre des tables donne en amont, il est
trs courant de crer une table de consultation qui contient uniquement une liste de valeurs
valides pour un champ d'une table dpendante. Au lieu de coder en dur une liste de valeurs
dans une rgle de validation concernant le champ de la table dpendante, vous contrlez la
liste des valeurs en dfinissant une rgle d'intgrit rfrentielle entre la table de consultation
et la table dpendante. Lajout de nouvelles valeurs est facile : il suffit d'ajouter un
enregistrement la table de consultation, au lieu de modifier la conception de la table
dpendante.

2.1.10.7
N'utilisez pas NumroAuto pour les identificateurs qui doivent
tre conscutifs ou qui ont une signification spciale
Pour peu que vous ayez dj utilis le type NumroAuto, vous savez que l'on se retrouve
facilement avec des trous dans la numrotation, et pas seulement parce qu'un utilisateur a
supprims des enregistrements. Si l'utilisateur commence la cration d'un nouvel
enregistrement dans une table ayant un champ NumroAuto squentiel, Access gnre le
nombre suivant ; si l'utilisateur appuie sur CHAP pour effacer sa saisie et annuler la
cration de l'enregistrement, ce numro est perdu jamais.
Les trous dans la numrotation sont parfois sans consquence. En revanche, il est parfois
vital d'avoir des numros squentiels qui se suivent sans discontinuits ; c'est
particulirement vrai pour les donnes comptables (chques, factures, commandes, etc.).
Vos rgles mtier pourraient imposer que votre application gnre des numros qui aient une
signification et qui soient conscutifs. Ainsi, dans l'application de gestion du stock, le
numro d'une commande de rapprovisionnement lie une commande client est le numro
de cette commande suivi d'un numro squentiel de trois chiffres. Si la commande de
rapprovisionnement est simplement destine rtablir le stock son niveau minimal, le
numro est le chiffre 9 suivi des quatre chiffres de l'anne et d'un numro squentiel de trois
chiffres. Il suffit donc de regarder le numro d'une commande de rapprovisionnement pour
en connatre l'utilit. Le numro ici a une signification, chose que l'on ne peut pas obtenir
avec un NumroAuto.

2.1.10.8

Prohibez les cls primaires artificielles dans les tables enfant

Quand on a un ensemble de tables lies en cascade sur trois niveaux ou plus, il est souvent
tentant de crer une cl primaire simple artificielle (souvent avec un NumroAuto) aux
niveaux infrieurs pour ne pas avoir transporter en cascade une cl primaire compose. Ne
faite pas cela !

2.1.10.9

Dsactivez le suivi des corrections automatiques de nom

Access version 9 (Access 2000) a introduit pour les bases de donnes de bureau (fichiers
.mdb) une innovation appele Correction automatique de nom qui essaie de propager
automatiquement vers les objets dpendants les modifications que vous faites sur les noms
de champ, de table et de requte. Vous pouvez activer cette fonctionnalit pour chaque base
de donnes individuelle, sachant qu'elle est active par dfaut pour les nouvelles bases. La
correction automatique fait un travail plutt bon en matire de correction de noms de champ,
de table ou de requte. Cependant, elle ne corrige pas les rfrences ces objets dans le code
Visual Basic et elle n'arrive pas corriger les noms dans certains types d'expression. En
outre, elle ne corrige pas les noms de champ dans les tables lies.

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

17

Microsoft Access 2010

Quand vous dveloppez votre application, vous pourriez trouver bon d'activer ces options.
Cochez Suivi informations correction automatique pour signifier Access de gnrer les
identificateurs internes qui lui servent propager les modifications de nom. Cochez
Effectuer correction automatique de nom pour signifier Access de contrler les
requtes, les formulaires et les tats chaque fois que vous les ouvrez et de corriger
automatiquement tous les noms qui ont chang. Notez que la correction automatique marche
que vous ouvriez l'objet en mode Cration ou en mode standard (mode feuille de donnes
pour les requtes ; mode formulaire, tableau crois ou graphique crois pour les tables ;
mode aperu avant impression pour les tats). Cochez Historique corrections automatiques
pour demander Access de crer une table, appele Historique corrections automatiques,
contenant des enregistrements qui indiquent le type d'objet, le nom d'objet, le nom de
contrle, le nom de proprit, plus les ancienne et nouvelle valeurs pour chaque
modification.
Cependant, comme cette fonctionnalit se dclenche chaque fois que vous ouvrez un objet
dpendant, c'est une mauvaise ide que de la laisser active dans une base de donnes que
vous distribuez aux utilisateurs. Si vous modifiez, par exemple, un nom de champ dans une
table sans ouvrir et fermer tous les objets qui utilisent ce champ, les utilisateurs doivent avoir
la permission Modifier la structure sur tous les objets pour pouvoir excuter votre
application. En outre, les codes de suivi internes prennent de la place supplmentaire (bien
qu'insignifiante) dans le fichier .accdb.
Enfin, si vous activez Effectuer correction automatique de nom, vous ne connatrez pas
les modifications que fait Access pour votre compte sauf si vous activez aussi Historique
corrections automatiques ; en effet, Access fait les modifications sans vous en avertir. Il ne
vous demande mme pas de confirmer l'enregistrement d'un objet modifi aprs que vous
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

18

Microsoft Access 2010


l'avez ouvert, que vous n'avez fait aucune modification vous-mme (autre que celles
effectues par la correction automatique) et que vous l'avez ferm. Cette fonctionnalit de
modification silencieuse fait que je recommande de dsactiver la chose mme quand
vous dveloppez votre application. Pour dsactiver cette fonctionnalit pour la base de
donnes courante, videz l'option Suivi informations correction automatique dans la bote
de dialogue Options.

2.1.10.10

Utilisez bon escient la proprit Lgende

La saisie d'une proprit Lgende pour chaque champ de votre table facilite la
documentation de votre application. Comme Access affiche aussi la lgende sur la barre
d'tat, pensez bien ce que vous tapez dans le champ Lgende afin de fournir une espce de
mini aide aux utilisateurs de votre base de donnes. En outre, comme ces donnes se
propagent automatiquement, mieux vaut ne pas taper quelque chose d'absurde. Une lgende
du genre Mon patron m'a dit d'ajouter ce champ, mais je n'ai pas la moindre ide de son
utilit n'est pas une bonne chose ; elle apparatra ultrieurement sur la barre d'tat !

2.1.10.11

Crez des noms de champ qui soient parlants

Comme mentionn la section Mauvaise dnomination des champs en amont, vitez de


mettre des espaces dans les noms de champ. Cette rgle s'applique aux noms des champs
dans les tables et aux noms de champ alias dans les requtes. (Vous crez un nom de champ
alias dans une requte soit l'aide d'une clause AS aprs une expression dans la clause
Select, soit en tapant un nom, un deux-points et une expression sur la ligne Field de la grille
de conception de requte.) En l'absence d'une dfinition de la proprit Lgende, Access
utilise le nom de champ comme titre sur les tiquettes attaches sur les formulaires et tats
ou comme titre de colonne sur la vue feuille de donnes.
Si le nom du champ est un mot parlant, vous n'aurez sans doute pas besoin de dfinir une
proprit Lgende. En revanche, si le nom du champ est un nom compos du genre
QtyOnHand ou respecte une norme de dnomination maison (une telle norme aboutit
souvent des noms qui sont parlants pour le dveloppeur, mais pas pour l'utilisateur),
dfinissez une lgende de faon ne pas afficher le nom peu convivial du champ dans votre
application.

2.1.10.12

Comprenez les interactions entre Format et Masque de saisie

Aprs la mconnaissance de la diffrence entre le stockage et l'affichage d'un type


Date/Heure (dont nous avons parl en amont dans ce chapitre), la confusion qui est peut-tre
la plus courante concerne la diffrence entre la proprit Format et la proprit Masque de
saisie. Voici les points essentiels :
Quand un contrle ou un champ a seulement une proprit Format, celle-ci dtermine la
faon dont Access affiche les donnes quand le contrle ou le champ n'a pas le focus et
que le champ a une valeur ou a une valeur par dfaut sur un nouvel enregistrement. Le
format peut ne pas afficher toutes les donnes stockes dans le champ ou dans le contrle
(par exemple, un format pourrait n'afficher que la partie anne d'un champ Date/Heure).
Quand vous placez le focus sur le champ ou le contrle, Access supprime le format et
affiche les donnes relles.
Quand un contrle ou un champ a seulement une proprit Masque de saisie, celle-ci
dtermine la faon dont Access affiche les donnes quand le contrle ou le champ n'a pas
le focus et ce que vous pouvez taper quand vous commencez saisir des donnes dans le
contrle ou dans le champ. Si le champ contenait des donnes avant que vous ayez dfini
le masque de saisie ou si vous insrez des donnes dans le champ sans passer par le
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

19

Microsoft Access 2010


masque (par exemple, via une requte d'insertion), le masque risque de ne pas afficher
toutes les donnes.
Quand vous dfinissez un masque de saisie pour un champ textuel, vous pouvez dire au
masque de stocker tous les caractres de formatage en plus des donnes quez vous tapez.
Access n'inclut les caractres de formatage que quand vous modifiez le champ en tapant
dedans avec le masque actif.
Quand vous dfinissez et un format et un masque de saisie pour un contrle ou un champ
et que le format correspond au masque, Access affiche les donnes l'aide du format
quand le contrle ou le champ n'a pas le focus et il active le masque quand vous arrivez
sur un contrle ou un champ qui a dj des donnes ou qui a une valeur par dfaut. Si
vous tabulez vers un contrle ou un champ qui n'a pas de donnes, le masque de saisie
apparat ds que vous commencez taper.
Remarquez que tout cela fonctionne bien quand le format et le masque sont compatibles (ils
affichent le mme nombre de caractres selon le mme motif). Mais ne dfinissez jamais de
masque de saisie qui ne correspond pas la proprit Format. La mauvaise nouvelle est que
vous pouvez accidentellement dfinir un masque de saisie qui n'est pas compatible dans un
champ Date/Heure mme si vous n'avez pas dfini de format. Voici ce qui se passe quand les
proprits Format et Masque de saisie sont incompatibles :
La proprit Format a la priorit par rapport la proprit Masque de saisie quand le
contrle ou le champ contient des donnes ou une valeur par dfaut (que le contrle ou le
champ ait le focus ou non).
Si vous commencez taper dans un contrle ou dans un champ qui a des donnes ou qui
a une valeur par dfaut, le format disparat mais vous ne voyez pas le masque de saisie.
Cependant, vous devez taper des caractres qui soient compatibles avec le masque de
saisie invisible. Si vous essayez de sauvegarder une valeur qui ne correspond pas au
masque de saisie, Access affiche une erreur.
Si vous commencez taper dans un contrle ou dans un champ vide, le masque de saisie
apparat et contrle ce que vous tapez. La proprit Format affiche le rsultat quand vous
placez le focus ailleurs.
Le type Date/Heure est un cas spcial. Mme si vous n'avez pas dfini de format, Access
affiche les donnes l'aide du format Date gnrale. Si votre masque de saisie ne
correspond pas ce format, le contrle ou le champ fait comme si le format et le masque
taient incompatibles. Le problme est que le format Date gnrale peut afficher une
date, une heure ou les deux selon ce qui est stock dans le contrle ou dans le champ.
Vous pourriez dfinir un masque de saisie pour entrer uniquement la date ; mais si le
champ contient une partie heure, le champ fait comme s'il avait un format et un masque
de saisie incompatibles.

2.2 Conclusion : Connaissez vos donnes et leur usage


Dans tout exercice de conception de base de donnes, il est vital que vous compreniez bien
ce que votre application doit faire et les rgles mtier qu'elle doit mettre en uvre. titre
d'exemple, examinez une minute l'application classique de saisie de commande. Est-ce
que le prix d'un produit ne changera jamais au fil du temps ? Si oui (chose peu probable),
alors point n'est besoin d'enregistrer un duplicata du prix dans les enregistrements ligne de
commande. Est-ce que l'entreprise a besoin de suivre les modifications des prix des produits
au fil du temps ? Si oui, vous avez sans doute besoin d'une table spare pour les prix des
produits qui contienne la date effective du prix et vous avez besoin d'crire du code qui
recherche le prix en vigueur au moment de la passation d'une commande.
BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

20

Microsoft Access 2010


Un produit est-il disponible chez un seul fournisseur ou peut-on trouver un produit identique
ou quivalent chez un autre fournisseur ? Si un produit quivalent est acceptable, avez-vous
besoin d'une autre table pour connatre les quivalences entre produits ? Si vos rgles mtier
imposent que le second achat et les achats suivants du mme produit dans une mme
commande obtiennent une remise (si vous en achetez un, vous avez le second moiti prix),
est-ce que vous refltez la remise dans un mme enregistrement ligne de commande ou estce que le commercial entre le second achat sur un autre enregistrement avec la remise ?
Quand vous concevez une base de donnes, n'ayez pas peur de poser un tas de questions. Et
n'ayez pas peur de remettre en question tout ce que vous dit votre utilisateur. Faut-il vraiment
une seule adresse pour un client ? Est-ce qu'un employ peut contourner les prrequis
concernant l'inscription un cours afin d'inscrire un tudiant un cours avanc ? Est-ce que
vos besoins mtier risquent de changer un jour ? Sachez que la rponse cette dernire
question est toujours OUI !

BRB/brb Source : Microsoft Office Access pour lentreprise Microsoft Press

21