私はいくつかの例外処理を行い、繰り返しフィールド値(キー違反)エラーを傍受しようとしています。トラップに多くの示唆を見ソリューションアイブのための私の検索から、すべてのエラーがトラップキー違反
try
(enter code)
except on E: EDatabaseError do
showmessage (Error message);
end;
を使用しますが、私はキー違反に特異的に対応したいと思い、それはADOを使用してアクセステーブルを使用しています。
私はいくつかの例外処理を行い、繰り返しフィールド値(キー違反)エラーを傍受しようとしています。トラップに多くの示唆を見ソリューションアイブのための私の検索から、すべてのエラーがトラップキー違反
try
(enter code)
except on E: EDatabaseError do
showmessage (Error message);
end;
を使用しますが、私はキー違反に特異的に対応したいと思い、それはADOを使用してアクセステーブルを使用しています。
あなたが扱うように望んでいるだけで、エラーが「重複する値」というメッセージを有するものである場合、これは動作します:あなたの説明から
try
// Your code
except
on E: EOleException do
begin
// The better way is to find out what E.ErrorCode is
// for this specific exception, and handle it instead
// of checking the string - you didn't provide the
// ErrorCode, though.
// If E.ErrorCode = <whatever> then
//
if Pos('duplicate value', E.Message) > 0 then
// You've got a duplicate with the message above
// Do whatever handles it
else
raise;
end;
// If you want to handle other exception types (eg., EDataBaseError),
// you can do so here:
// on E: EDataBaseError do
// HandleDBError;
end;
英語以外のシステムでローカリゼーションが失敗する可能性はありますか?ちょっとした考え!また、コードはすべてのEOleException例外を呑み込んでいます。 –
この問題が発生しない優れたソリューションを提供するために私の答えを更新しました。 'Pos'行の上のコメントを見てください。 :) –
どうすればエラーコードを見つけることができますか? – Alexjjsmith
、これは何かのような音はありません、あなたがすべき例外的なところまで行きましょう。特に続ける必要があるのは、EOleException
です。例外は、あなたが扱う良い方法を持っていない物でなければなりません。そして、それはここではそうではありません。
新しいレコードを追加しようとする前に、新しいIDが使用されていないことを確認することをお勧めします。あるいは、@ TLamaが示唆しているように、例外になる前にこれをフックできるDBフレームワークのエラー処理機能を利用してください。
@kenトランザクションは2と取引し、あなたは約1のポイントを持っています。おそらく、perfはあまりにも大きな問題です。私はDB側の視点ではなくプログラミング側から考えています。 –
しかし、これはおそらくDBデータ提供制御イベントの一部で*捕らえられる*かもしれません。 – TLama
@traama、どこに捕まえても問題ありません。それはまだ捕らえられなければならない。 –
EDatabaseError
がKey violation
例外が発生したときに、このために、specifcエラーコードを取得するにはTADOConnection.Errors
プロパティを使用する必要があり、ADOでのエラーに関する拡張情報を取得するには、エラーに関する追加情報がなく、単に一般的なexcptionクラスですNumber
とNativeError
のプロパティを確認してください。
あなたは、特にあなたがトラップしたい例外を識別何ここ
をこのトピックの詳細ドキュメントを見つけたことができますか? –
すでに存在し、次のメッセージが返されるクライアントID(主キー)を持つ新しいクライアントをシステムに追加すると、例外クラスEOleExceptionが発生しました。 'テーブルに要求した変更は成功しませんでした。主キー、または関係 ' – Alexjjsmith
に重複する値を作成すると、同じメッセージが返されたが、EOleExceptionの代わりにEDatabaseErrorが返された場合 – Alexjjsmith