0

データベースに接続されたアプリケーションを使用しています。
BDEコンポーネントとデータベースを使用して接続されているのはMySQLです。

現在、insertステートメントの実行中に重複エントリがあるかどうかを確認するための検証を行っています。

以下は、主キー属性のエントリが重複していないかどうかを確認するためのコードです。

var
  error :string; 
  cmpres:integer;
begin
 ...
 /* all my data queries */
  try
    Query1.ExecSQL;
  Except
   on E: Exception do
   /*check if its a Duplicate entry or other exception*/
    begin    
         error := E.Message;
         error := copy(error,length(error)-16,length(error)-2);
         cmpres :=CompareStr(LowerCase(error),'for key '+#39+'primary'+#39) ;
         if cmpres = 0  then
           MessageDlg('Entry already exist',mtError,[mbok],0)
         else
           MessageDlg('Invalid Data Entries',mtError,[mbok],0);
         exit;
    end;
  end;
end; 

データベースの例外は広く内部に置かれています EDatabaseError

メッセージの比較を行わずにこれらのエラーを区別できる方法はありますか?
前もって感謝します

4

1 に答える 1

1

BDEを使用している場合、例外はEDatabaseErrorではなくEDBEngineErrorである必要があります。あなたはこれを行うことができます:

try
    Query1.ExecSQL;
except
    on E: EDBEngineError do
    begin
        for i := 0 to E.ErrorCount - 1 do
        begin
            err := E.Errors[i];
            case err.ErrorCode of
                ... stuff ...
            end;
        end
    end;
end
于 2012-04-19T13:48:58.287 に答える