Malheureusement, vous avez affiché du code qui ne correspond pas au message d'erreur que vous signalez. Votre code actuel appelle StrToInt
plutôt que IntToStr
. Je sais ceci parce que ce message d'erreur est produit par des appels à StrToInt
plutôt que IntToStr
.
Votre code ressemble plus à ceci:
UniqueID := StrToInt('2312357250');
Notez que StrToInt
renvoie un type entier signé 32 bits. Les valeurs valides sont comprises entre -2 147 483 648 et 2 147 483 647. Votre valeur est en dehors de la plage valide pour Integer
, d'où l'erreur.
Si vous voulez un moyen simple de marchepieds toutes ces questions de portée, puis utilisez Int64
au lieu de DWORD
ou Integer
, et appelez StrToInt64
.
De plus, ces lignes sont gênants:
UniqueID := GetTickCount;
LastUniqueID := GetTickCount + 1000;
Vous faites deux appels distincts à GetTickCount
. Ces deux appels peuvent donner des valeurs différentes. En effet, si GetTickCount
survole, le second appel peut renvoyer une valeur inférieure à la première.
Encore plus de problèmes entourent GetTickCount + 1000
. Si GetTickCount
renvoie une valeur proche de la limite supérieure, vous rencontrerez un dépassement d'entier, ce qui peut avoir des résultats inattendus. Utilisez GetTickCount64
pour éviter ce piège.
Cependant, je reste à être convaincu que le nombre de ticks du système peut être un bon moyen de générer un identifiant unique. En fonction de vos besoins, cela peut constituer une mauvaise solution à votre problème, quel qu'il soit. À première vue, votre code semble interdire de demander un identifiant unique moins d'une seconde plus tard que la fois précédente. Bien sûr, sans connaître vos exigences, il est difficile de recommander une alternative.
Je vous invite à l'avenir à vous assurer que le code que vous postez correspond à l'erreur que vous signalez. Vous n'avez pas réussi à faire ça ici. Prenez l'habitude de poster un [mcve] que vous avez vérifié. Le fait que le code que vous avez posté ne correspond pas au message d'erreur suggère un manque de clarté de pensée qui est un blocage fondamental de votre progression et de votre développement. Ralentissez et réfléchissez plus fort lorsque vous faites face à des problèmes. Obtenez vos faits clairs avant de sauter aux conclusions. Améliorer vos schémas de pensée sera payante. –
Si vous avez besoin d'un identifiant unique, pourquoi ne pas utiliser ['CreatGUID'] (http://docwiki.embarcadero.com/Libraries/fr/System.SysUtils.CreateGUID)? –
@DavidHeffernan l'électricité a été coupée. J'oublie d'ajouter que je convertis à nouveau en singles entiers. votre réponse claire d'utiliser int64 m'aide à vous remercier. –