残念ながら、報告したエラーメッセージと一致しないコードが表示されています。あなたの実際のコードは、IntToStr
ではなくStrToInt
を呼び出します。私はこのエラーメッセージがではなくStrToInt
への呼び出しによって生成されるため、これを知っています。 StrToInt
は、符号付き32ビット整数型を返す
UniqueID := StrToInt('2312357250');
注こと:
あなたのコードでは、より多くのこのようになります。有効な値は、-2,147,483,648〜2,147,483,647の範囲です。あなたの値はInteger
の有効な範囲外です。したがって、エラーです。
これらすべての範囲の問題を簡単に解決するには、DWORD
またはInteger
の代わりにInt64
を使用し、StrToInt64
に電話してください。
はさらに、これらの線は面倒です:
UniqueID := GetTickCount;
LastUniqueID := GetTickCount + 1000;
あなたはGetTickCount
に二つの別個の呼び出しを行います。これらの2つの呼び出しは、異なる値を生成することがあります。実際にGetTickCount
がロールオーバーすると、2番目の呼び出しは最初の呼び出しよりも小さい値を返します。
さらに多くの問題は、GetTickCount + 1000
を囲んでいます。 GetTickCount
が上限に近い値を返すと、整数オーバーフローが発生し、結果が期待しない結果になることがあります。その落とし穴を避けるためにGetTickCount64
を使用してください。
しかし、私は、システムのティックカウントがユニークなIDを生成する良い方法であると確信しています。要件に応じて、これは問題が解決しない場合もあります。それに直面すると、あなたのコードは、前回要求したよりも1秒未満の一意のIDの要求を排除するように見えます。もちろん、お客様の要件を知らなくても、代替案を推奨することは困難です。
あなたが投稿したコードがあなたが報告したエラーと一致することを確認することをお勧めします。あなたはここでそれをすることはできませんでした。あなたが確認した[mcve]を投稿する習慣に入ってください。投稿したコードがエラーメッセージと一致しないという事実は、あなたの進歩と発展の基本的なブロックである、思考の明確さの欠如を示唆しています。あなたが問題に直面したら、ゆっくりと考えてください。結論に飛ぶ前にあなたの事実を明確にしてください。あなたの思考パターンを改善することは配当金を支払うでしょう。 –
一意のIDが必要な場合は、['CreatGUID'](http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.CreateGUID)を使用してみませんか? –
@DavidHeffernan電気が遮断されました。私は整数に戻ってuniquestringをもう一度変換することを追加することを忘れないでください。あなたの答えは、int64を使っていることからはわかりません。 –