IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Un bon fondement pour vos tables Access

Date de publication : 25/07/2005

Par Maxence HUBICHE (Site Perso)
 

Le fondement de toute bonne base, c'est avant tout le modèle (cf Merise). Mais construire une bonne table est extrêmement important. il peut être nécessaire de passer un peu de temps dans la définition correcte d'une table. Cela pourrait vous permettre d'en gagner beaucoup par la suite.


I. Introduction
II. Création d'une table
II-A. Généralités
II-B. Les types de données
II-C. Les propriétés des champs
II-D. Les listes de choix
II-E. Les propriétés de la table
III. Les index
III-A. Qu'est-ce que c'est ?
III-B. Créer un index
III-C. Un index multi-champs
III-D. Supprimer un index
III-E. Penser à améliorer les performances


I. Introduction

Vous conviendrez avec moi qu'il est plutôt facile de créer une table dans Access, d'y mettre quelques champs avec leurs types de données. Et ensuite, on passe très rapidement à la réalisation de nos formulaires et états. Cependant, il est souvent utile de prendre du temps lors de la création de la table, car cela peut justement nous permettre de gagner du temps dans l'élaboration de nos formulaires et états.

Si l'on comparait la construction d'une base de données à la construction d'une maison, les tables représenteraient le gros oeuvre, et les formulaires et états, la décoration. Vous serez d'accord avec moi, si vous avez fait l'expérience au moins une fois dans votre vie, pour dire qu'il est beaucoup plus facile de poser du papier-peint (déco) sur des murs bien droits et bien lisses(gros-oeuvre) que sur des murs bancales. Vous serez aussi d'accord pour dire qu'un mur bancale demande moins de travail qu'un mur bien droit. Et bien l'analogie sera la même dans le cadre de la base de donnée. Réaliser les formulaires et états sera beaucoup plus facile si les tables sont bien montées.


II. Création d'une table


II-A. Généralités

Pour faire simple, nous allons partir sur la base de données d'exemple de Microsoft : Comptoir.mdb. Normalement, vous pourrez la trouver sur ce chemin :
C:\Program Files\Microsoft Office\Office\Samples
Cependant, si vous ne la trouvez pas, alors faites une recherche.

Lorsqu'on crée une table, en mode création, la fenêtre proposée contient deux parties.

Table en mode création
La partie supérieure permet de définir les champs et leurs types de données (même si Microsoft aurait pu faire un peu plus ordonné à ce niveau là) ainsi qu'une zone description.
La partie inférieure contient les propriétés des champs, ainsi qu'un onglet intitulé 'Liste de choix'

Nom de la colonne Description
Nom du champ Le nom du champ doit être unique.
Théoriquement, vous pouvez mettre n'importe quel caractère dans un nom de champ, c'est à dire, tout caractère numérique, tout caractère alphabétique, les espaces et underscore, etc.
Cependant, pour des raisons de facilité, il est fortement déconseillé d'utiliser d'autres caractères que des caractères alphanumériques, car, ultérieurement, vous risqueriez de rencontrer des difficultés, notamment lors de la définition d'expressions calculées.
Dernier conseil : Arrangez-vous pour qu'un nom soit unique dans la base. Souvent les développeur utilisent le principe du préfixe. Ainsi, dans la table des Employés, le champ Nom pourrait s'appeler empNom le préfixe emp rappelant le nom de la table et Nom étant le nom du champ, à proprement parler.
Type de données C'est ici que Microsoft aurait pu faire un peu plus clair. En effet, pour définir correctement un type de données, il faut se servir des informations contenues dans la liste qui vous est proposée, mais il faut également chercher la propriété (dans la partie inférieure de l'écran) Taille du champ qui vous permettra d'affiner le type. Ainsi, par exemple, on ne définit pas un champ de type Texte mais plutôt un champ de type Texte(20) ce qui indique le nombre maximum de caractères dans ce champ (ici 20)
Description La description est hélas considérée comme une information optionnelle. Certains pensent que ce qui y est écrit n'est visible qu'en mode création, ce qui est faux. Les informations contenues dans cette colonne sont également visible en mode feuille de données, mais aussi à travers les formulaires, dans la barre d'état au bas de la fenêtre Access. N'hésitez donc pas à être le plus précis possible. Il s'agit là de la première aide pour l'utilisateur, mais également, d'un soutien pour vous lorsque vous reviendrez sur un champ quelques mois plus tard.
Une fois la liste des champs définie, vous pouvez définir la clé primaire. Pour ce faire, rien de plus simple, encore une fois : Vous sélectionnez le champ concerné, et vous cliquez sur le bouton 'Clé primaire' qui apparait dans la barre d'outils. Vous pouvez aussi passer par le menu Edition/Clé primaire


II-B. Les types de données

C'est ici que j'aurai aimé que Microsoft 'organise un peu mieux les choses'. En effet, pour définir correctement un type de données, comme je l'ai dit précédemment, il va falloir jouer sur deux points : La liste de choix des types de données (qui contient des types de données, sous types de données, et accès à un assistant liste de choix) mais aussi la propriété Taille du champ. En fait, on pourrait définir les données ainsi :

Grand Type Type de données Taille du champ Remarques
Caractère Texte => 255 Jusqu'à 255 caractères quelconques, interprétés comme du texte et non comme du numérique.
Access ne réserve pas de place pour les caractères non utilisés. Il est cependant intéressant de définir une taille 'raisonnable' à vos champs, ne serait-ce que pour limiter les saisies abherrantes.
  Mémo N/A Jusqu'à 65535 caractères.
J'ai positionné le type mémo dans le grand type 'Caractère' car c'est son usage, la plupart du temps. Par contre, sous certaines conditions, il pourrait n'être limité que par la taille de la base de données. Je vous laisse vous replonger dans l'aide pour plus d'informations à ce sujet.
  Lien Hypertexte N/A Il s'agit d'un texte en plusieurs parties (chaque partie pouvant contenir jusqu'à 2048 caractères). Les différentes parties sont :
Le texte à afficher
L'adresse
La sous-adresse
Le texte d'info bulle
Numérique Numérique Octet Stocké sur 1 octet
Peut contenir toutes les valeurs entières comprises entre 0 et 255
  Numérique Entier Stocké sur 2 octets
Contient toute valeur comprises entre -32768 et +32767, du moment qu'il s'agit d'une valeur entière.
  Numérique Entier Long Stocké sur 4 octets
Contient n'importe quelle valeur comprise dans l'intervalle -2 147 483 648 et +2 147 483 647, du moment qu'il s'agit d'une valeur entière.
  Numérique Réel Simple Stocké sur 4 octets
Contient n'importe quelle valeur comprise dans les intervalles suivants :
-3,402823E38 et -1,401298E-45 pour les valeurs négatives
1,401298E-45 et 3,402823E38 pour les valeurs positives
0

Attention ! Il s'agit de valeurs approchantes. On considèrera qu'il n'y a que 7 chiffres significatifs.
  Numérique Réel Double Stocké sur 8 octets
Contient n'importe quelle valeur comprise dans les intervalles suivants :
-1,79769313486231E308 et -4,94065645841247E-324 pour les valeurs négatives
4,94065645841247E-324 et 1,79769313486231E308 pour les valeurs positives
0

Attention ! Il s'agit de valeurs approchantes. On considèrera qu'il n'y a que 15 chiffres significatifs.
  Numérique Décimal Stocké sur 12 octets
Contient un nombre compris entre -10^28-1 et 10^28-1. Il a d'ailleurs une précision de 28 chiffres, ce qui est bien supérieur au Réel Double.
  Numérique N° Réplication Stocké sur 16 octets
il s'agit en fait d'un GUID (Globally Unique IDentifier) qui sert en général uniquement à identifier un réplica, un jeu de réplica, etc. Bref, à moins d'avoir à faire une réplication de votre base de données, vous avez peu de chances de l'utiliser.
  Date/Heure N/A Stocké sur 8 octets
Contient n'importe quelle valeur temporelle de date ou d'heure située entre les années 100 et 9999 (du 1/1/100 au 31/12/9999)
  Monétaire N/A Stocké sur 8 octets
Contient une valeur numérique positive ou négative ayant une précision de 15 chiffres à gauche de la virgule et 4 à droite.
  NuméroAuto Entier Long Stocké sur 4 octets
Contient une valeur numérique de capacité équivalente à Numérique/Entier Long.
La seule chose qui les différencie est qu'un champ en numéroAuto contient une valeur qui change de manière incrémentielle ou aléatoire (suivant la manière dont est définie la propriété Incrément) et qu'on ne peut donc ni faire de saisie, ni modifier les données d'une telle colonne, au risque de rencontrer quelques soucis.
  NuméroAuto N° Réplication Stocké sur 16 octets
Contient une valeur numérique de capacité équivalente à Numérique/N° Réplication.
La seule chose qui les différencie est qu'un champ en numéroAuto contient une valeur qui change de manière incrémentielle ou aléatoire (suivant la manière dont est définie la propriété Incrément) et qu'on ne peut donc ni faire de saisie, ni modifier les données d'une telle colonne, au risque de rencontrer quelques soucis.
  Oui/Non N/A Stocké sur 1 bit
Ne peut contenir que les valeur booléennes VRAI et FAUX
Binaire Objet OLE N/A Jusqu'à 1 giga-octet
Contient toutes les données binaires d'un Objet qui n'est pas géré par Access (exemple : une feuille de calcul, une image, un film, un son, un document Word).
Cette solution semble idéale pour tout débutant, mais il faut prendre en compte la taille maximale de la base de données, qui risque d'être atteinte très rapidement si on insère des objets de forte taille.
Il n'est donc pas conseillé de mettre des Objets OLE dans une table.

II-C. Les propriétés des champs

Je vous liste ci-dessous l'ensemble des propriétés existantes pour les champs dans les bases de données de la version 2003. il est donc possible que certaines soient inexistantes dans votre interface.

Propriété Description
Taille du champ S'applique aux champs de type Texte, Numérique et Numéroauto
Détermine le nombre de caractères (texte) ou les caractéristiques du nombre qui sera stocké dans le champ
Format S'applique à tous les types de champs, sauf OLE
ATTENTION ! Une erreur courante consiste à déterminer un format sur des nombres pour n'avoir que 2 chiffres après la virgule (par exemple). Ceci est une abherration. Un format ne modifie que l'affichage du contenu du champ. Si l'on devait déterminer un processus temporel dans les évènement relatifs à une saisie, on dirait : L'utilisateur tape une valeur, il sort du champ, après vérification la valeur est enregistrée, puis elle s'affiche avec le format attendu. Donc, le format intervient bien après la saisie. L'application d'un format risque donc de vous montrer autre chose ce qui est bel et bien contenu dans le champ.

Vous pouvez choisir un format prédéfini ou bien créer le votre.
Ainsi, par exemple, pour un champ texte, vous pourriez définir "@@ @@ @@ @@ @@" pour afficher un format de numéro de téléphone. Ainsi, la saisie de 0123456789 afficherait 01 23 45 67 89. Vous pourriez aussi demander que l'affichage d'un champ nom soit systématiquement affiché en majuscules. Ainsi la définition d'un format à ">" sur ce champ afficherait DUPOND alors que la saisie effective serait dupond
Dans le cas d'une valeur numérique, vous avez de nombreuses options déjà définies dans la liste des formats. Cependant, ici aussi, vous pouvez définir les votre. Par exemple, si vous avez une valeur monétaire et que vous souhaitiez afficher les valeurs positives en vert, les valeurs négatives en rouge et les zéros sous la forme "zéro"... et les NUL sous la forme "NULL", vous pourriez définir ce format :
# ##0.00€[Vert];-# ##0.00€[Rouge];"Zero";"Null"
Décimales Valable pour les numériques et monétaires
Nombre de décimales à afficher
Masque de saisie Voici un vrai petit joujou. Pas toujours évident à cerner au premier abord, mais tellement fonctionnel !
Nous avons vu précédemment que la propriété format intervenait APRES la saisie effective des données. Le masque de saisie, lui, intervient AVANT l'enregistrement de celles-ci. Il intervient directement sur la faculté de saisir de l'utilisateur
Le terme qui m'intéresse le plus est celui de masque. En effet, l'une des caractéristiques d'un masque est de présenter des trous (trous pour les yeux, la bouche, ...) Il en est de même du masque de saisie. Lorsque vous allez créer un masque de saisie, vous allez faire des trous pour permettre à l'utilisateur d'effectuer sa saisie. Si vous devez stocker 10 caractères, il faudra prévoir 10 trous. C'est simple non ? Ce premier point étant vu, examinons un trou. Un trou va permettre d'afficher quelque chose de bien précis (tel trou pour un oeil, tel autre pour la bouche) de la même manière, vous allez pouvoir 'qualifier' chaque trou du masque de saisie. Y aura-t-il un chiffre ? du texte ? un caractère quelconque ? Sera-t-il obligatoire ou non ? L'aide, plutôt bien faite, nous apporte tout un tableau des codes que nous pouvons mettre dans un masque de saisie. Et comme il est difficile de mieux faire, je vous propose de le retrouver ici. Rappelez-vous cependant que pour y accéder, il vous suffit de vous mettre sur une propriété 'masque de saisie' et d'appuyer sur la touche miracle : F1.

0 => Chiffre (0 à 9, entrée obligatoire, signes plus (+) et moins (-) non acceptés).
9 => Chiffre ou espace (entrée facultative, signes plus et moins non acceptés).
# => Chiffre ou espace (entrée facultative, positions vierges converties en espaces en mode édition, mais les espaces sont effacés lors de la sauvegarde des données, signes plus et moins acceptés).
L => Lettre (A à Z, entrée obligatoire).
? => Lettre (A à Z, entrée facultative).
A => Lettre ou chiffre (entrée obligatoire).
a => Lettre ou chiffre (entrée facultative).
& => Caractère quelconque ou espace (entrée obligatoire).
C => Caractère quelconque ou espace (entrée facultative).
. , : ; - / => Séparateurs de décimales, de milliers, de date et d'heure (le caractère effectivement utilisé dépend des paramètres de la boîte de dialogue Propriétés pour Paramètres régionaux du Panneau de configuration Windows).
< => Convertit tous les caractères en minuscules.
> => Convertit tous les caractères en majuscules.
! => Permet un remplissage du masque de saisie à partir de la droite et non de gauche à droite, lorsque les caractères situés à gauche du masque de saisie sont facultatifs. Les caractères tapés dans le masque le remplissent toujours de la gauche vers la droite. Le point d'exclamation peut être placé n'importe où dans le masque de saisie.
\ => Affiche le caractère qui suit sous sa forme ASCII littérale (par exemple, \A s'affiche sous la forme A).

Il devient donc très facile d'imaginer le masque de saisie ">CCCCCCCCCC" pour forcer la saisie d'au plus 10 caractères queconques, mais en majuscule exclusivement.
Un code postale français pourrait devenir sans problème "00000" par exemple Il peut y avoir trois sections au maximum dans un masque de saisie, séparée par des points-virgule. La première section, c'est le masque en lui même. Ceci, nous en avons déjà parlé. La troisième section (oui, j'ai sauté la deuxième, mais nous y reviendrons) est amusante : vous pouvez saisir un caractère qui sera affiché dans tous les 'trous' du masque, au moment de la saisie. Ainsi si vous faites ce masque :
>CCCCCCCCCC;;* au moment de saisir, vous vous retrouverez avec votre curseur au milieu de **********, c'est à dire la visualisation par les étoiles (*) de vos 10 trous du masque. Vous pouvez y mettre le caractère que vous voulez. Au fur et à mesure de votre saisie, ils sont remplacés.
La seconde section est un peu plus délicate à comprendre... Suivant la façon dont vous la renseignez, vous ne stockerez dans votre champ, au choix, que les données saisies par l'utilisateur, ou bien, l'ensemble des caractères saisis par l'utilisateur, PLUS les caractères d'affichage littéraux du masque. Prenons un exemple pour illustrer
Si je crée un champ pour code postal en Texte(5) - C'est à dire, seulement 5 caractère autorisés au stockage - ainsi :
00 000;0;0
Je me mets dans l'impossibilité de saisir un Code postal. Pourquoi ? Parce que le 0 que vous voyez dans la deuxième section indique qu'il faut stocker la saisie (les 5 caractères symbolisés par les 0 du masque de saisie) AINSI QUE les caractères d'affichage (tel l'espace entre le département et le canton) ce qui nous produit 6 caractères à stocker dans un champ qui ne peut en contenir que 5. Faites toujours attention à la manière dont vous définissez cette deuxième section !
Si j'avais fait ce masque :
00 000;;0 ou même celui-ci : 00 000;1;0
Il n'y aurait eu aucun souci car, dans ces 2 cas, seuls les caractères effectivement saisis par l'utilisateur seront enregistrés dans le champ.
Légende Valable pour tous les types
Au vu des points que nous avons examiné précédemment, vous vous êtes probablement interrogés sur la nomenclature que je vous proposais pour les noms des champs. Ca doit faire bizarre à l'utilisateur de voir empNomDeFamille comme nom de champ... Et bien non !
La légende est là pour nous sauver. Le texte qu'elle contient s'affichera en lieu et place du nom, et ceci aussi bien dans la table que dans les requêtes, que dans les formulaires, etc.
Bref, tout l'intérêt d'avoir une nomenclature des champs correcte pour pouvoir jouer plus sereinement avec les légendes par la suite, simplement pour faire plaisir à l'utilisateur final.
Valeur par défaut La valeur par défaut est la valeur proposée lors de la création d'un nouvel enregistrement. Si, par exemple, vous saisissez des employés, et qu'il y a la date de l'embauche, et en estimant que, régulièrement vous saisissez la fiche du client au jour le jour, vous pourriez donc proposer que la date par défaut soit la date du jour. Auquel cas, il vous ssuffirait alors de définir la propriété Valeaur par défaut à Date() pour que, à chaque nouvelle ligne, la date du jour soit prérenseignée.
Valide Si Cette propriété limite ce qu'il est possible de saisir dans un champ. Si vous écrivez une règle telle que <=Date(), il vous sera impossible de saisir une date postérieure à la journée en cours sur votre PC.
Message si erreur Définissez dans cette propriété le message à afficher à l'utilisateur lorsque la règle de validation est violée par l'utilisateur.
Pour vous donner un exemple en rapport avec la règle de validation donnée en exemple dans la propriété précédente, on pourrait ainsi mettre ce message "La date saisie est invalide car elle ne doit pas dépasser aujourd'hui. Merci de corriger..
Null Interdit Si vous définissez cette propriété à Oui, alors, une saisie sera obligatoire. Si vous la laissez à Non, vous permettez de laisser le champ dans un état de non-renseignement : NULL (à moins que votre règle de validation ne l'en empêche.
Chaîne vide autorisée Valable uniquement pour les types de données Texte, Mémo et Liens HyperTexte. Ne définissez cette propriété sur Oui que si vous voulez permettre la saisie d'une chaîne vide ("") ce qui est différent d'un NULL (équivalent à une inconnue, je le rappelle).
Je vous coneille de laisser la propriété à sa valeur par défaut : NON. Cela vous évitera les tests nécessitant de différencier le NULL du "" qui ne s'affichent, ni l'un ni l'autre.
Indexé Il y a 3 possibilités :
Non => Si vous ne voulez pas d'Index
Oui avec doublons => Choisissez cette option si vous voulez 'pré-trier' les données de votre colonne, mais en permettant l'existence de doublons en son sein.
Oui sans doublons => Choisissez cette option si vous voulez obliger une saisie unique dans toute la colonne. Une clé primaire est obligatoirement indexée sans doublons, puisqu'une clé primaire est obligatoirement unique.
On ne peut mettre d'index sur les champs de type Mémo, Lien HyperTexte ou Objet OLE
Nous reparlerons plus avant des index dans une autre partie, un peu plus loin.
Compression Unicode Valable pour les champs de type Text, Mémo et Lien HyperTexte.
Cette propriété analyse les caractères (UNICODE - sur 2 octets) que vous écrivez. S'il sont susceptibles de tenir sur un seul octet (ASCII) alors, la compression a lieu. La décompression aussi, lors de la lecture. Positionnée à oui, cette option vous permet donc d'économiser un peu d'espace disque. Je vous recommanderai donc de la laisser à sa valeur par défaut : OUI.
Mode IME IME est l'acronyme de Input Method Editor. La définition du mode IME détermine le mode de conversion Kanji (un tracé de l'écriture japonaise). Si vraiment vous êtes intéressés par la transcription en japonais, jetez-vous dessus. Sinon ... abstenez-vous !
Mode de formulation IME Histoire de compliquer un peu, il s'agit maintenant, toujours pour ce fameux Kanji, de déterminer le mode de phrase (parlé, pluriel, standard) ... bref, encore une fois, à moins d'être particulièrement intéressé par ce paramètre ... on oublie.
Balises actives Les balises actives permettent d'identifier un mot ou un groupe de mots d'être identifier comme étant un élément particulier, et de donner ainsi accès à des fonctionnalités particulières.
Par exemple, identifier un nom de personne et pouvoir déclencher une prise de rendez-vous, envoyer un message, afficher le contact identifié, etc.
Nouvelles valeurs Cette propriété est visible sur les type 'NuméroAuto'. Vous pouvez choisir la manière dont les nouvelles valeurs vont apparaître : soit de manière incrémentée, soit de manière aléatoire. Par défaut, Access choisit l'incrémentation. Le pas est un pas de 1.

II-D. Les listes de choix

When you want to look up the data from one table and put it into another, the easiest way is to use a lookup field. You can also use the lookup field to type in a list of values (e.g., Monday, Tuesday, etc.) that may not be in a table. A lookup field displays a combo-box for that field in the table's datasheet view.
To create a lookup field, select "Lookup Wizard..." from the Data Type drop-down menu in the top section of the table's design view. This starts the Lookup wizard, which steps you through creating the lookup field. This wizard is very similar to the Combo Box wizard in the form design view.
To create a simple drop-down list, select "I will type in the values that I want" and click on Next. Type the days of the week into the grid (figure 3) and click on Next. Type "Day" as the label and click on finish. The wizard adds the new field to the table and sets the Data Type automatically.
After you create the field, make sure you set the other properties (e.g., Description, Field Size, Caption, etc.) to values you'd like. Notice these are all on the General tab of the Field Properties at the bottom of the table design window. Click on the Lookup tab (figure 4) to see the results of the Lookup wizard.
The Lookup tab of the Field Properties determines how a field looks in datasheet view. The properties here are basically a subset of the properties of a Combo Box or List Box control on a form. Set the Limit To List property to Yes if you want to restrict the user to values in the list.
You can also use the Lookup wizard to display the drop-down values from an existing table. Just step through the wizard and select the table and fields from which you want to select. The properties on the Lookup tab are set accordingly.
The main advantage of creating lookup fields at the table level is that these fields carry over to any forms you create. That means when you use the form wizard or drag the field onto the form, Access creates a combo box or a list box instead of a text box. How's that for a time saver?


II-E. Les propriétés de la table

Just as each field has its own properties, the table itself has properties that affect how data is entered and displayed. You can access the property sheet by selecting Properties from the View menu in table design view.
Description -- You see the table's description when you select the View > Details menu item in the database window. Use this field to describe what you're using the table for.
Validation Rule -- Access tests the table's validation rule when you leave the current record. This rule is useful when you're creating rules based on multiple fields (e.g., [StartDate] <= [EndDate]). You can also test individual fields, but you must include the field name (e.g., [Quantity] < 100).
Validation Text -- This is the same as the field's Validation Text, only this displays when a user violates the table's Validation Rule.
Filter -- Enter a valid SQL Where clause into this property to display a subset of data when you view the table. Using the Filter by Selection and Filter by Form options in datasheet view also sets this property. This is why you're prompted to save changes to the design of a table when you open a table, create a filter, then attempt close the table.
Order By -- Set this to a field in the table to sort the data by that field. Clicking on the Sort Ascending and Sort Descending buttons in datasheet view also sets this property. Changing the sort also causes the Save Changes prompt to appear.
SubdatasheetName -- Set this property to select from which table or query the subdatasheet pulls data. A subdatasheet is basically a table nested inside another table that contains data related to the main table. Clicking on the plus sign to the left of a record expands the subdatasheet in the table's datasheet view. Click on the minus sign to collapse the subdatasheet. Setting this field to "[Auto]" uses the table's relationships to determine which table to display. Figure 5 shows the Orders table with the Order Details table in the subdatasheet.
Link Child Fields -- Set this property to the fields in the child table, which displays in the subdatasheet, that relate it to the fields in the master table.
Link Master Fields -- Set this property to the fields in the master table, the table currently in design view, that link to the fields in the child table.
Subdatasheet Height -- Set this to 0 if you want the subdatasheet to expand to its maximum size. Setting it to another number limits how big the subdatasheet can grow.
Subdatasheet Expanded -- Set this to Yes if you want all the subdataheets expanded when you open the table in datasheet view. Leave it set to the default value of No if you want them collapsed, which is what I recommend.


III. Les index


III-A. Qu'est-ce que c'est ?


III-B. Créer un index


III-C. Un index multi-champs


III-D. Supprimer un index


III-E. Penser à améliorer les performances



Copyright © 2005 Maxence Hubiche. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.