|
|
|
|
|
Utilisez INDEX pour organiser les données afin d'effectuer des recherches rapides et un
affichage ordonné. INDEX ne modifie pas réellement l'ordre des enregistrements dans une
table, mais crée un fichier index dans lequel les enregistrements sont classés par ordre
numérique, caractère ou date en fonction de la valeur d'une expression clé. Comme
l'index d'un livre, avec des entrées ordonnées et des numéros de page correspondants,
un fichier index contient des expressions clés ordonnées avec des numéros
d'enregistrements correspondants. Lorsque la table est utilisée avec un index maître, le
contenu de la table apparaît dans l'ordre spécifié par l'index.
A la fin d'une opération d'indexation, le nouveau fichier index devient l'index maître,
et le pointeur d'enregistrement est positionné sur le premier enregistrement de la table
indexée. dBASE ferme tous les autres index, excepté ceux dont les repères d'index se
trouvent dans le fichier .MDX d'exploitation (le cas échéant) de même nom que la table.
Ordre de tri
Dans un index, les enregistrements sont généralement classés dans l'ordre croissant,
avec les plus petites valeurs de clés au début de l'index. Avec le jeu de caractères
DOS de page de code 437 (US), les clés caractères sont ordonnées selon l'ordre ASCII
(de A à Z, puis de a à z) ; les clés numériques sont ordonnées de la plus petite
à la plus grande valeur ; et les clés dates sont ordonnées de la date la plus
rapprochée à la date la plus éloignée. Incluez la fonction UPPER( ) dans
l'expression clé pour convertir toutes les lettres minuscules en lettres majuscules et
réaliser l'ordre alphabétique pour les champs de type caractère.
Note : Vous pouvez inverser l'ordre d'un index en classant les
enregistrements dans l'ordre décroisssant, avec le mot réservé DESCENDING. Vous ne
pouvez utiliser DESCENDING qu'avec les repères d'index .MDX.
Si une fonction est utilisée dans une expression clé, n'oubliez pas que l'index est
ordonné en fonction de la sortie de la fonction. Ainsi, lorsque vous utilisez FIND ou
SEEK, ou tout ce qui accède à la valeur clé d'un enregistrement, incluez l'expression
clé entière. Par exemple, INDEX ON SOUNDEX(NOM) TO NOMS crée un index ordonné sur les
valeurs renvoyées par SOUNDEX( ). Lorsque vous recherchez des données par la valeur
clé, vous devez inclure l'expression clé entière, telle que SEEK
SOUNDEX("Jean") au lieu de SEEK "Jean".
Même <Valeur Clé>
Dans certaines tables, plusieurs enregistrements peuvent partager la même <valeur de
clé>. Utilisez l'option UNIQUE pour n'inclure que le premier enregistrement de même
valeur clé dans l'index. INDEX avec l'option UNIQUE a un effet identique à l'indexation
d'une table avec SET UNIQUE ON. dBASE ne prend en compte les index UNIQUE qu'une seule
fois. Une valeur de clé précédemment cachée n'est donc pas automatiquement mise à
jour lorsqu'elle est modifiée. Pour mettre à jour explicitement toutes les valeurs de
clé dans un index UNIQUE, utilisez REINDEX.
FOR : Mettre des conditions
FOR <condition> limite les enregistrements dont les valeurs des expressions clés
sont incluses dans l'index aux enregistrements qui satisfont à la condition spécifiée.
Par exemple, si vous utilisez INDEX ON NOM + PRENOM TO EMPLOYES FOR SALAIRE > 24000,
dBASE inclut uniquement dans l'index les enregistrements dont les salaires des employés
sont supérieurs à 24 000 F. La condition FOR ne peut inclure les champs calculés. Liste des fonctions pouvant être utilisées dans
<expression clé> et FOR <condition>
Utiliser un index
Lorsqu'une table a été indexée, utilisez LOOKUP( ), SEEK, SEEK( ) et FIND
pour récupérer des données. La structure d'un fichier index permet l'utilisation de ces
commandes pour localiser rapidement les valeurs de l'expression clé.
Mise à jour des enregistrements
Lorsque vous exécutez APPEND, BROWSE, CHANGE, EDIT, INSERT, PACK, REPLACE, @...GET ou
UPDATE, dBASE met à jour automatiquement tous les fichiers index ouverts. Les fichiers
index fermés lorsque des modifications sont effectuées dans une table peuvent être
ouverts et mis à jour en utilisant REINDEX.
Les fichiers index multiples simplifient la mise à jour des index, puisque dBASE met à
jour tous les index dont les repères appartiennent aux fichiers .MDX spécifiés par
USE...ORDER ou SET ORDER. dBASE ouvre automatiquement un fichier .MDX d'exploitation (le
cas échéant) lorsque vous ouvrez la table associée.
INDEX ... TAG
INDEX...TAG crée un index et ajoute le repère d'index dans un fichier index multiple. Si
vous n'incluez pas OF <fichier>, INDEX...TAG ajoute le repère d'index dans le
fichier .MDX d'exploitation. Visual dBASE crée le fichier .MDX d'exploitation ou le
fichier spécifié s'il n'existe pas déjà.
INDEX...TAG ferme tous les index ouverts, excepté les repères d'index du fichier .MDX
d'exploitation ou du fichier .MDX spécifié. Si des repères d'index du fichier .MDX
spécifié ne sont pas ouverts, dBASE les ouvre.
Différence INDEX et SORT
INDEX est similaire à SORT, une autre commande qui vous permet de trier une table. A
l'opposé de INDEX, SORT réorganise physiquement les enregistrements de la table, ce qui
représente un traitement très long pour des fichiers volumineux. Pour maintenir l'ordre
de tri, les nouveaux enregistrements doivent être placés au bon emplacement en utilisant
INSERT ou bien la table entière doit être retriée. De plus, SORT ne supporte pas SEEK,
SEEK( ) ou FIND, ce qui ralentit la localisation des données dans une table triée.
|
Il n'existe aucune méthode directe pour remplacer cette commande en OODML, cependant,
il y a des objets INDEX et la méthode CreateIndex() de l'objet base de données.
Lorsqu'elle est utilisée sur une table locale, la méthode CreateIndex() nécessite que
la table soit utilisée exclusivement. Voir SET EXCLUSIVE
Pour créer une balise d'index pour un DBF.
D'abord, vous devez créer une instance de l'objet DBFINDEX, assigner les propriétés
appropriées, puis utilisez la méthode CreateIndex() de l'objet base de données. Pour ce
faire, procédez comme suit:
| i = new DBFIndex() i.indexName := "name of tag" // ou fichier .NDX i.expression := "expression pour indexer" i.type := 0 // 0 = MDX, 1 = NDX _app.databases[1].createIndex( "NomTable", i ) |
Pour créer un index pour tout autre type de table.
Outre DBFIndex, il est existe également l'objet Index, qui est essentiellement là pour
une utilisation avec tout autre type de table.
| i = new Index() i.indexName := "nom de l'index" i.fields := "champ à indexer" _app.databases[1].createIndex( "tableName", i ) |
L'objet Index a les propriétés suivantes : casesensitive, descending et unique.
|
IndexTags.cc
Classe conçue pour permettre au développeur d'obtenir un tableau d'informations sur un fichier d'index .MDX, ou de permettre à un utilisateur de sélectionner une balise d'index à partir d'un formulaire qui affiche les noms des index et des expressions
Cretable7.prg
Programme conçu pour obtenir un fichier au format.txt (cretable7.txt) qui est le code pour recréer une table et ses index.
usage :
| set procedure to :duflp:cretable7.prg additive cretable7("MaTable.dbf") ou creatable7("*.dbf") // pour obtenir le code de tous les fichiers situés dans le dossier |
|
Indexer avec une date
Ne pas utiliser le DTOC() pour convertir une date en une chaîne, mais DTOS(). Dans de
nombreux formats de date, le jour vient avant le mois ou le mois vient avant le jour et
l'année, il en résulte des enregistrements dans le mauvais ordre.
La valeur de l'expression clé doit toujours avoir la même longueur
Ne créez pas un index dont la longueur de l'expression clé varie d'un enregistrement à un autre. Plus précisément, ne pas utiliser TRIM () ou LTRIM () pour supprimer les blancs à partir de chaînes à moins que vous compensiez en ajoutant assez d'espaces pour s'assurer que les valeurs de la clé de l'index sont toutes de la même longueur. L'opérateur - concatène des chaînes tout en réorganisant les espaces de fin. Des longueurs variables de la clé peuvent causer des index corrompus. N'utilisez jamais de fonctions telles que CHR( ), LTRIM( ), RTRIM( ), TRIM( ) et IIF( ) qui modifient la longueur de champ dans l'expression clé.
L'index créé l'est suivant les fonctions utilisées
Si une fonction est utilisée dans une expression clé, gardez à l'esprit que l'index est ordonnée en fonction du résultat de la fonction. Ainsi, lorsque vous utilisez la recherche pour une clé particulière, vous devez rechercher l'expression clé qui a été générée. Comme indiqué dans la partie description, par exemple, INDEX ON SOUNDEX(nom) crée un index des noms classés par les valeurs retournées par SOUNDEX(). Lors d'une tentative de trouver des données par la valeur de la clé, il vous faudra utiliser quelque chose comme SEEK SOUNDEX ("Jean") plutôt que de chercher "Jean".
FOR <condition> limite les enregistrements inclus dans l'index à ceux qui répondent à la condition spécifiée. Par exemple, si vous utilisez INDEX ON Nom + Prenom TO Employes FOR Salaire > 24000, dBASE Plus ne comprend dans l'index que les enregistrements des employés avec des salaires plus élevés que 24 000 . La condition FOR ne peut pas inclure des champs calculés.
Index : distinct, primary et unique
Reconstruire un fichier Index
Voir le code de la fonction Unique()
Sources :
Aide Visual dbase V5.7
http://www.dbase.com/Knowledgebase/INT/xb2vdb7oodml/x2oodml.htm
Aide dBase Plus 2.6.0
dUFLP version W
Si vous voyez des erreurs, ou souhaitez apporter des compléments, n'hésitez pas à le signaler.
Les informations de cette page sont données à titre indicatif et ne se substituent pas à celles contenues dans l'Aide de votre version de dBase qui reste la meilleure documentation.
Dernière modification : lundi 13 septembre 2010
© M.Abraham.