Lors d'une recherche dans colonne de type UUID d'une table HFSQL, on aura couramment le code :

MaTableDeDonnées.HLitRecherche(Colonne_UUID, sVariable)

 

Dans ce code :

  • Colonne_UUID est une colonne d'une table décrite de type UUID,
  • sVariable est une variable ou un membre de type chaine.

Si la variable sVariable n'a pas été affectée avec un UUID valide, l'exécution déclenche le mécanisme de sécurité du WLangage car la conversion est impossible :

 

Vous avez appelé la fonction 'HLitRecherche'.

Impossible de convertir la donnée du type <Chaîne> dans le type <UUID (128 bits)> de la rubrique <MaTableDeDonnées.Colonne_UUID >.

Code erreur : 70500

 

Afin d'éviter tout risque d'erreur, une solution recommandée consiste à utiliser une variable de type UUID. On peut ajouter une procédure utilitaire au projet, appelée systématiquement pour toutes les conversions.

 

Exemple :

 

Procedure ChaineVersUUID(sChaine) : UUID
unUUID est un UUID
SI sChaine="" ALORS
unUUID=Nil_UUID
SINON
QUAND EXCEPTION DANS

unUUID=sChaine

FAIRE
unUUID = Nil_UUID // (**)

FIN
FIN
RENVOYER unUUID

 

 

Le code de la recherche sera alors (plus de risque d'erreur) :

 

UUID_A_Chercher est un UUID
UUID_A_Chercher = ChaineVersUUID(sVariable)
SI UUID_A_Chercher <> Nil_UUID ALORS
SI HLitRecherche(MaTableDeDonnées, Colonne_UUID, UUID_A_Chercher) ALORS

...
FIN

 

(**) La procédure de conversion peut remonter un assert, une erreur, un message à gestionnaire, pour indiquer qu'il y a des données mémorisées dans un mauvais format et donc à contrôler.

 

Bon à savoir, un UUID sera considéré valide lorsqu'il a un format usuel :

  • 8-4-4-4-12
  • ou {8-4-4-4-12}
  • ou notation historique Microsoft "32" (monobloc).

 

Ce choix a été préféré à celui d'accepter n'importe quel format, afin d'être sûr de ne pas laisser passer "n'importe quoi" par erreur. Sachant que normalement tous les UUID sont écrits avec ces 3 formats usuels.

 

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée