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!!! |