UNIQID

Sommaire


uniqidpermet de générer une suite d'entiers longs uniques pour chaque table d'Adonix.

 

Syntaxe

   uniqid ( classe )

 

Paramètres

Elément

Description

Restrictions

classe

Désignation d'une table.

La table doit être ouverte.

 

Exemples

   # Je veux numéroter de manière unique l'enregistrement écrit
    [F:FIC1]NUMERO =uniqid([FIC1])
    Write [FIC1]

 

Description et commentaires

uniqidpermet d'avoir un numéro unique pour une table donnée ouverte au préalable; ces numéros sont attribués de manière séquentielle et peuvent donc servir de clé d'accès au fichier. 

Ces numéros seront conservés par copie, par extraction et restauration, par revalidation de la table.

Attention! Cette séquence de numéros n'est pas forcément une suite consécutive de numéros. Exemple, il n'y a pas de récupération du numéro suite à un Rollback.   

Le type du résultat est Integer.

 

Remarques

Pour une table nouvellement créée, les numéros sont attribués à partir du numéro 1 et ensuite de façon séquentielle de 1 en 1. En cas de changement de structure, le numéro courant est conservé; en cas de remise à 0 d'une table, les numéros sont ré-attribués en repartant à 1. Il n'existe pas d'autres moyen pour décrémenter cette séquence de numéros. 

Les nombres attribués séquentiellement ne peuvent pas être ré-attribués si une transaction est abandonnée par Rollback. Pour implémenter ce genre de fonction si l'on désire que tous les numéros soient attribués, il est donc préférable de faire appel à des compteurs (un compteur principal et un tableau contenant les numéros abandonnés à ré-attribuer en priorité, par exemple).

L'instruction uniqid s'exécute même si la table est verrouillée.

L'instruction uniqid ne met pas à jour la variable [S]fstat.

 

Dysfonctionnement du aux séquences de la base de donnée

Ce numéro unique délivré par l'instruction uniqid est parfois utilisé dans un champ de clé sans homonyme. ( Exemple sur la table AREPORTM )
IL y a problème si la séquence n'existe plus. X3 renvoit un message d'erreur lié à la base de données. Il faut alors consulter le journal d'évènements de la base de la base pour en avoir le détail. 

Les séquences servant à bâtir des clés uniques, si la fonction uniqid rend une valeur inférieure à la dernière enregistrée, X3 va afficher un message d’erreur de type « Clé déjà existante dans la table ». Dans ce cas là il faut remettre la séquence à jour.

 

Comment vérifier la validité de la séquence d'une table ?

Exemple pour la table GACCDENTRYD d’un dossier « DEMO »

Sous X3

    Local file GACCENTRYD [DAE]
   
Local integer MAX
    MAX = uniqid([DAE])
    Read [DAE]DAE2 last
    If MAX < =[F:DAE]ACCNUM

       Errbox « La séquence de la table GACCENTRYD doit être rebâtie »
   
     Errbox « Elle devrait être à »   +num$([F :DAE]ACCNUM)+ « mais elle est à » +num$(MAX)
    Endif

Sous Oracle

# Il faut avoir positionné les bonnes variables d’environnement etc. afin de pouvoir lancer les requêtes SQL suivantes.

Select last_number from user_sequences where sequence_name =’SEQ_GACCENTRYD’; 

Sous SQL Serveur

select value from SS_SEQUENCE where usr='DEMO' and name='GACCENTRYD'

 

Comment remettre la séquence à la bonne valeur ?

Sous X3

# En continuant le traitement commencé ci-dessus.
# Le plus simple est de s’assurer qu’on est bien seul sur le dossier

If nbruser > 1 : Errbox ‘Vous n’êtes pas seul sur ce dossier !’ : End : Endif
While uniqid([DAE]) <MAX : Wend

Sous Oracle

#après s’être assuré qu’on est bien seul sur le dossier
# le plus sûr est de recréer les séquences avant de les mettre à la bonne valeur

Drop sequence SEQ_GACCENTRYD ; (détruit le registre)
Create sequence SEQ_GACCENTRYD increment by 1 start with <MAX+1> ;
grant select on SEQ_GACCENTRYD to USER_ADONIX
grant select on SEQ_GACCENTRYD to ADMIN_ADONIX

Sous SQL Serveur

# on se contente de mettre à jour les séquences sans les détruire au préalable

update SS_SEQUENCE set value=<MAX> where name='GACCENTRYD' and usr='DEMO'

 

Erreurs associées

Erreur

Description

ERCLAS( 7)

Lefichier n'est pas ouvert.

 

Mots-clés associés

READ - WRITE - READLOCK - ROLLBACK


SOMMAIRE

Adonix X3(r) L4G
Copyright (c) Adonix 1999 - All rights reserved