6

Delphi 2007 と ADO を使用して、SQL Server 2008 データベースにアクセスしています。

データベースのストアド プロシージャは入力を事前検証し、検証が失敗した場合はエラー結果セット (カスタム エラー情報を含む) を返します。SQL Server Management Studio を使用してストアド プロシージャを実行すると、カスタム エラー結果セットが 1 つのタブに表示され、ネイティブ エラー メッセージが別のタブに表示されます。

Delphi アプリに戻り、ストアド プロシージャを開くと、カスタム エラー結果セットにアクセスできます。ただし、ErrorsADO 接続のオブジェクトにはネイティブ エラーは含まれません。

Errorsエラーの原因に関する詳細情報を提供できるように、コレクション オブジェクトにアクセスするにはどうすればよいですか?

ありがとう

4

1 に答える 1

5

オプション1)ADO接続エラーコレクションを使用します。

try
....
....
....
 ADOQuery1.Open;//Execute your sql statement
except
  LastErrorIndex  :=ADOConnection1.Errors.Count-1;
  SourceError     :=ADOConnection1.Errors.Item[LastErrorIndex].Source;
  NumberError     :=ADOConnection1.Errors.Item[LastErrorIndex].Number;
  DescriptionError:=ADOConnection1.Errors.Item[LastErrorIndex].Description;
  SQLStateError   :=ADOConnection1.Errors.Item[LastErrorIndex].SQLState;
  NativeError     :=ADOConnection1.Errors.Item[LastErrorIndex].NativeError;
end;

オプション2)@@ error変数を使用して、SQLサーバーから最後のエラーを取得できます。

select @@error

SQL Serverでエラーが発生した場合、取得できるのは@@ERRORグローバル変数を使用したエラー番号だけです。エラーの説明を取得するための@@ERROR_MESSAGEグローバル変数はありません。完全なエラーメッセージについては、エラー番号を使用してmaster..sysmessagesテーブルにクエリを実行できます。

SELECT Description FROM master..sysmessages  WHERE error= @@ERROR AND msglangid=1033

ただし、これらのメッセージのほとんどにはプレースホルダー(%s、%ldなど)があり、このストアドプロシージャを使用することもできます。

詳細については、この記事「 SQL Serverでのエラー処理–背景」をお読みください。

さよなら。

于 2009-09-21T22:33:39.383 に答える