2009-02-18 9 views
4

Je dois créer des ID d'enregistrement uniques dans VFP en fonction des informations d'envoi: zip5, adresse, nom de famille, prénom. Une fois créées, les tables relationnelles seront chargées dans le serveur SQL 7 avec les identifiants uniques. Des suggestions?Créer des identifiants uniques dans VFP

Répondre

4

Vous pouvez utiliser un GUID: GUID entry at FoxPro Wiki.

Et voici quelques examples.

utilisant un WSH Easiest ...

* VFP 7+ 
    oGUID = CreateObject("scriptlet.typelib") 
    cGUID = Strextract(oGUID.GUID, "{", "}") 

    * Other VFP 
    oGUID = CreateObject("scriptlet.typelib") 
    cGUID = substr(oGUID.GUID, 2, 36) 
2

VFP n'a pas le support pour les ID uniques - en ce qu'elle a Primary Indexes (qui peut reposer sur plusieurs champs - mais assurez-vous que la longueur de clé est fixée, de manière si votre table VFP utilise des varchars, vous devrez remplir les champs) et une table peut également avoir Candidate Indexes (où les champs indexés doivent être uniques, comme une clé primaire, mais vous pouvez avoir plusieurs index candidats par table). L'une ou l'autre de ces options imposera l'unicité dans vos champs, mais générer une clé primaire basée sur zip5, adresse, nom et prénom sera inefficace. La suggestion de GUID fonctionnera bien, ou si vous avez VFP8 ou plus tard, vous pouvez utiliser un Autoinc column, qui est analogue à une colonne Identité dans SQL Server.

Soit dit en passant, les index uniques sont only used for backward compatibility ..

-1

J'ai créé ma propre fonction à cet effet pour renvoyer un identifiant unique. Quand j'ai un nouvel enregistrement, je scanne simplement la base de données et la fonction remplace le champ identifiant unique (j'appelle le mien UID) dans la base de données avec un nouvel uid si l'enregistrement n'en a pas.

FUNCTION UIDgenerator() 
    LOCAL c_UID 
    LOCAL c_dump 

    c_UID = STRTRAN(SYS(2015),"_","") + [-] 

    c_dump = STRTRAN(SYS(2015),"_","") 
    c_dump = STRTRAN(SYS(2015),"_","") 
    c_dump = STRTRAN(SYS(2015),"_","") 

    c_UID = c_UID + STRTRAN(SYS(2015),"_","") 


    RETURN c_UID 

    endfunction() &&UIDGenerator 

Vous ne devez pas faire c_dump 3 fois, mais je voulais les identifiants être un peu plus loin à part.

Questions connexes