1

学期試験用のスケジューラ アプリケーションを構築しようとしています。教師が特定の週、特定の日、特定の時間にクラスを持っているかどうかをデータベースに問い合わせています。DBExpress を使用して Delphi Xe2 で SQL エラー コードを処理する方法はありますか? SQL Server2008で質問を実行するクエリ(ユーザーにパラメーターを選択させます)があり、ここに問題があります。ユーザーが 1 つのパラメーター フィールドを空にすると、アプリケーションは画像にメッセージを表示します。これはエラー メッセージを表示するユーザー フレンドリーな方法ではないため、成功せずに例外を処理しようとしました。これは、SQL Server にクエリを実行するために作成したコードです。

with DataModule1.QueryV1 do
 Try
    Close;
    SQL.Clear; // clear command sql if there is
    SQL.Add ('SELECT * FROM OrarC WHERE IDZi =' +
    QuotedStr(LlbZiua.KeyValue)+ 'and IDInterval=' + QuotedStr(LlbIntOrar.KeyValue) +
     'and IDSala='+ QuotedStr(EdtIDSala.Text)+ EdtSaptamana.Text);
    Open;
  except
    on E:TDBXError do begin
      showmessage('Error!');
    end;
  End;

E:TDBXError で E:EDataBaseError も試しましたが、結果は同じです。返された SqlErrorCode でエラーを処理するのは良いことですが、それを取得する方法がわかりません。 ここに画像の説明を入力

4

1 に答える 1

2

デバッガーでプログラムを実行し、発生した例外の実際のクラスを観察するか、実行時に次のような例外クラスを取得できます。

  ..
except on E: Exception do
  ShowMessage(E.ClassName);
end;

それが本当にならTDBXError、あなたは例えば使うことができます

uses
  dbxcommon;

except
  on E: TDBxError do begin
    if (E.ErrorCode = TDBXErrorCodes.InvalidArgument) then
      ..

しかし、私が見る限り、245はの1つではないTDBXErrorCodesので、おそらく他の例外があります。EDatabaseErrorクラスにはエラーコードフィールドがないため、それがあれば何もすることはありません。

あまり関連性はありませんが、中央の場所でdbexpress例外を管理できるようにするには、 Data.DBXCommon.TDBXConnection.OnErrorEventも参照してください。

于 2012-05-18T10:09:16.747 に答える