PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WEBDEV 2024 → GUID (Globally Unique IDentifier)
GUID (Globally Unique IDentifier)
Iniciado por Samuel Tremblay, nov., 14 2006 4:45 PM - 6 respostas
Publicado em novembro, 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!!!
Publicado em novembro, 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
Publicado em novembro, 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
Publicado em novembro, 15 2006 - 3:51 PM
Comme tu veux c'est pour tout le monde :D
Publicado em dezembro, 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 !!!
Membro registado
1.322 mensagems
Popularité : +20 (72 votes)
Publicado em dezembro, 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
Membro registado
1.629 mensagems
Popularité : +100 (114 votes)
Publicado em dezembro, 22 2023 - 4:00 PM
17 ans après, il n'est jamais trop tard :D