| |

UNIQUE()
Commande dBase IV et vsions suivantes
Indique si un index spécifié a été créé avec le mot réservé UNIQUE
(ou avec SET UNIQUE ON), ignorant les enregistrements dupliqués.
Syntaxe
UNIQUE( [ [<fichier .mdx>,] <position d'index expN> [,<alias>] ] )
<fichier .mdx>
Spécifie un fichier index multiple qui contient le repère d'index que vous voulez
vérifier.
<position d'index expN>
Sélectionne un repère d'index ou un fichier index par la position d'un repère d'index
dans un fichier .MDX ou par la position d'un fichier index dans la liste des index ouverts
pour la table en cours ou la table spécifiée. Le numéro de la position d'index
spécifie la position de l'index dans la liste des index ouverts avec les commandes SET
INDEX et USE.
<alias>
Un numéro de zone de travail (1 à 225), une lettre de zone de travail (A à J) ou un nom
d'alias. La lettre de zone de travail ou le nom d'alias doit être entouré de guillemets.
La fonction UNIQUE( ) renvoie .T. si l'index spécifié par le
paramètre facultatif <position d'index expN> a été créé avec l'option
INDEX...UNIQUE, ou avec INDEX et SET UNIQUE ON. Si vous ne spécifiez pas de numéro
d'index, UNIQUE( ) vérifie l'index ou le repère d'index maître pour la zone de
travail en cours ou la zone de travail spécifiée.
La fonction UNIQUE( ) renvoie .F. lorsque :
- L'index maître, l'index ou le repère d'index spécifié n'a pas été
créé avec l'option INDEX...UNIQUE, ou avec INDEX et UNIQUE défini à ON.
- Un numéro d'index n'est pas inclus et la table en cours n'a pas d'index maître.
- Aucun index ou repère d'index ouvert dans la zone de travail en cours ou la zone de
travail spécifiée n'a le numéro d'index spécifié.
UNIQUE( ) renvoie une erreur si l'index ou le fichier spécifié
n'existe pas.
UNIQUE( ) renvoie false si l'index ou
le fichier .MDX spécifié n'existe pas.
Il n'y a pas d'équivalent direct en OODML, mais comme avec TAG() et les
autres fonctions utilisées pour interroger une balise d'index, il est possible de le
reproduire en utilisant l'objet TableDef.
t = new TableDef()
t.tableName := "matable"
t.load()
? t.indexes["indexName"].unique |
Dans
l'exemple suivant, UNIQUE( ) permet de déterminer si la clé d'un index spécifié a
été créée avec UNIQUE :
USE SOCIETE EXCLUSIVE
INDEX ON C_SOCIETE TAG C_SOCIETE
SET ORDER TO TAG C_SOCIETE
? TAG( ), "UNIQUE = ", UNIQUE( )
INDEX ON ETAT TAG ETAT OF Location UNIQUE
SET ORDER TO TAG ETAT OF Location
? TAG( ), "UNIQUE = ", UNIQUE( )
? TAG(1), "UNIQUE = ", UNIQUE(1), MDX(1)
* UNIQUE peut faire référence à un index par sa position
* C'est le premier index de SOCIETE.MDX |
Refaire les index
Exemple de l'aide de DBPlus pour Unique(), votre version de dBase
contient peut-être une meilleure version de ce code.
La fonction suivante génère un fichier programme qui va recréer tous
les index à partir de zéro. Ce programme généré renseigne aussi sur les balises
d'index. Il utilise la fonction MDX() pour obtenir le nom du fichier .MDX qui contient la
balise d'index active. S'il n'ya pas de balise d'index active, la production .MDX est
utilisé. Merci de noter que ce programme ne prend pas en compte les index primary et
distinct.
PROCEDURE GenMDX( cFile )
local cMdx, cMdxFile
cMdx = mdx( )
if cMdx == ""
*-- Si pas de balise d'index active, essaie de faire le
.MDX
cMdx = mdx( 1 )
if cMdx == ""
msgbox( "Pas de fichier Index", "Cool, rien
à faire ;o)", 48 )
return
endif
endif
*-- Set OF clause for non-production .MDX
cMdxFile = iif( cMdx == mdx( 1 ), "", [ of "] + cMdx + ["] )
*-- Retire lecteur et/ou chemin du nom de fichier .MDX
*-- (after setting OF clause, because that checks cMdx)
cMdx = substr( cMdx, max( rat( ":", cMdx ), rat( "\", cMdx ) ) + 1 )
local lSafety
lSafety = ( set( "SAFETY" ) == "ON" )
set safety on
if argcount( ) < 1
cFile = left( cMdx, rat( ".", cMdx ) - 1 ) + "X.PRG"
endif
set alternate to ( cFile )
set console off
?
set alternate on
??"* " + cFile
? "*"
? "* Fichier index pour " + cMdx
if cMdxFile == ""
?? " (production .MDX)"
endif
? "*"
? "* Généré le " + dtoc( date( ) ) + " " + time( )
? "*"
?
? [*-- Delete all current tags from specific .MDX only]
? [do while "" # tag( "] + cMdx + [", 1 )]
? [ delete tag tag( "] + cMdx + [", 1 )]
? [enddo]
?
nNdx = 1
do while "" # key( cMdx, nNdx )
? [index tag ] + transform( tag( cMdx, nNdx ), "@! XXXXXXXXXX" ) +
;
cMdxFile + [ on ] + key( cMdx, nNdx )
if "" # for( cMdx, nNdx )
?? [ for ] + for( cMdx, nNdx )
endif
if descending( cMdx, nNdx )
?? [ descending]
endif
if unique( cMdx, nNdx )
?? [ unique]
endif
nNdx = nNdx + 1
enddo
close alternate
if .not. lSafety
set safety off
endif |
La fonction utilise les fonctions KEY(), FOR(), DESCENDING(), et UNIQUE() pour obtenir
la définition de chaque index.
retour
Sources :
Aide Visual dbase V5.7
http://www.dbase.com/Knowledgebase/INT/xb2vdb7oodml/x2oodml.htm par Ken Mayer
Aide dBase Plus 2.6.0
Retour à l'accueil
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.
Si vous voyez des erreurs, ou souhaitez apporter des compléments, n'hésitez pas à le signaler.
Dernière modification : mercredi 11 août 2010
© M.Abraham.
|