titre_site.jpg (51607 octets)

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.

 ico_MsDos.jpg (1668 octets)  dbasedos.gif (376 octets) vdb5.gif (351 octets) Description

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.

Plus2_5-Icon.jpg (1250 octets) UNIQUE( ) renvoie false si l'index ou le fichier .MDX spécifié n'existe pas.

Plus2_5-Icon.jpg (1250 octets) xDML vers ooDML

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

 

Code      ico_MsDos.jpg (1668 octets)   dbasedos.gif (376 octets)   vdb5.gif (351 octets)   Plus2_5-Icon.jpg (1250 octets)

dbasedos.gif (376 octets) 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

Plus2_5-Icon.jpg (1250 octets) 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.