PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 2025 → GUID (Globally Unique IDentifier)
GUID (Globally Unique IDentifier)
Started by stremblay, Nov., 14 2006 4:45 PM - 6 replies
Posted on November, 14 2006 - 4:45 PM
Aussi connu comme UUID dans d'autre plateformes, avec quelques variations d'algorithme...

Un identifiant unique mondialement, pas 2 système dans le monde n'est théoriquement supposé pouvoir générer le même GUID avec l'algorithme implanté dans windows...

Meme PCSoft s'en servent dans leurs outils, remarquez la présence de GUID pour identifier leur rubriques, etc... Ceux qui travaillent avec MS-SQL l'on disponible par défaut.

Moi je m'en sert pour identifier les records de toute mes tables, une session ou n'importe quoi qui se doit d'être identifié de façon unique. Sans avoir a posséder MS-SQL, avec ma solution j'utilise maintenant les GUID dans toute mes tables, peut importe si c'est HyperFile, MYSQL, etc...

Alors voila ma contribution a notre communeauté, ma procédure globale NewGUID() et son utilisation dans une table comme exemple:

Dans votre table, il faut créer une rubrique de type Texte de 38 qui sera votre clé primaire.

Dans le projet in faut charger la DLL de windows nécessaire en début d'execution comme suit:
GLOBAL
gnOLE32Inst est un entier = ChargeDLL("OLE32.DLL")

et la décharger en fermeture finale:
DéchargeDLL(gnOLE32Inst)


NOTEZ que pas besoin de charger Kernel car elle devrais toujours déja être en mémoire

Il faut aussi vous créer la procédure globale NewGUID():
// Résumé : Génère un nouveau GUID
// Syntaxe :
//[ <Résultat> = ] NewGUID ()
//
// Paramètres :
// Aucun
// Valeur de retour :
// chaîne : Un GUID
//
// Exemple :
// Rien
//
PROCEDURE NewGUID()

LOCAL
GUID est une structure
Data1 est un entier sans signe sur 4 octets
Data2,Data3 est un entier sans signe sur 2 octets
Data4 est un tableau fixe de 8 entiers sur 1 octet
FIN

I, nRetVal est un entier
theGuid est un GUID
sGUID est une chaîne ASCIIZ sur 260
cCar est un caractère
strGUID est une chaîne sur 38

nRetVal=AppelDLL32("OLE32.DLL","CoCreateGuid",&theGuid)

IF nRetVal=0 THEN
AppelDLL32("OLE32.DLL","StringFromGUID2",&theGuid,&sGUID,39)
POUR I = 0 A 259

AppelDLL32("kernel32", "RtlMoveMemory", &cCar, &sGUID+I,1)

SI Asc(cCar) <> 0 strGUID += cCar

FIN
RENVOYER strGUID
END
---------------------------------------------------------------------------------

Ensuite pour quand vous créer un enregistrement, faut juste mettre:
MaTable.GUIDdematable = NewGUID()

Même que pour automatiser le tout et sauver du codage j'ai créé des procédure globales qui contienne le code qui assigne la valeur au champ que j'appelle par la suite a l'aide de triggers déclaré dans mon projet:

SI PAS HDécritTrigger(MaTable,"HAjoute","InitNewRecord",hTriggerAvant) ALORS Erreur(HErreurInfo())

Bon alors voilà et bienvenu dans le merveilleux monde des GUID !!! Grace a cela, je lie toutes mes tables avec leur GUID et j'élimine toute informations redondantes comme exemple, un code client... Plus besoin d'y mettre une règle de contrainte d'interdiction de modifier le Code ou de forcer une mise a jour en cascade... puisque le clé GUID sert de lien !!!!

Contrairement a un identifiant Unique de base qui n'est qu'un chiffre qui s'incrémente, la synchronisation entre 2 bureau ne peut plus occasionner des problème de doublons! Les GUID sont garantie d'être différent! Ce qui est loin d'être le cas avec un chiffre que l'on incrémente...

Bonne journée à Tous!

PS: Étant débutant dans le monde WinDev,WebDev... j'ai commencé ya 1 mois a travailler avec... il se peut que mon code soit pas le meilleur, j'ai fait de mon mieux pour essayer de l'optimiser mais si qq'un parmis vous peut apporter des améliorations, ne vous gênez pas merci!!!
Posted on November, 14 2006 - 5:07 PM
Je viens même de trouver une code qui semble plus simple mais parcontre nécéssite la présence du framework de DOtNet.

Source:
http://www.codyx.org/snippet_generer-guid-identifiant-unique_224_l_windev_26.aspx
Posted on November, 14 2006 - 11:16 PM
Samuel Tremblay a écrit :
Je viens même de trouver une code qui semble plus simple mais parcontre
nécéssite la présence du framework de DOtNet.

Source:
http://www.codyx.org/snippet_generer-guid-identifiant-unique_224_l_windev_26.aspx


je peux publier ça dans les wtablettes STP ?

--
Eric Roumégou
Webmaster des wtablettes
Posted on November, 15 2006 - 3:51 PM
Comme tu veux c'est pour tout le monde :D
Posted on December, 01 2023 - 11:02 AM
=> Les GUID sont garanties d'être différent...
Oui, et Non...
pour être plus précis, la probabilité que l'on en rencontre deux identiques est très très faible, mais elle n'est pas nulle !!!
Registered member
1,410 messages
Posted on December, 22 2023 - 12:34 PM
Wouaw, ça c'est deterré du lourd ;) ;) :merci:

--
Bertin CARRIERE
SRL RGPD.Zen-Project.be
support@zen-project.be
www.zen-project.be www.linkedin.com/in/bertincarriere

+32(0)498/10.18.58
Co-President de l'asbl Be-Dev Association des développeurs Windev de Belgique
www.be-dev.be
Registered member
1,640 messages
Posted on December, 22 2023 - 4:00 PM
17 ans après, il n'est jamais trop tard :D