interbase procedureからSQLCODEを取得するには?

解決


ちゃ  2003-09-15 07:49:26  No: 4821  IP: [192.*.*.*]

delphi7,dbはinterbaseです。
以下のようなinterbaseのprocedure内のSQLCODEを
delphiのほうに取得したいのですが、どのようにこの
procedureを改造したらよろしいでしょうか。

CREATE PROCEDURE ADD_EMP_PROJ (EMP_NO SMALLINT, PROJ_ID CHAR(5))
AS
BEGIN
  BEGIN
   INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) 
   VALUES (:emp_no, :proj_id); 
   WHEN SQLCODE -530 DO 処理。。;
  END
  SUSPEND;
END ^

編集    削除
えび  2003-09-15 10:31:21  No: 4822  IP: [192.*.*.*]

プロシージャに出力パラメータを定義して、それにセットすれば良いです。
結果の取り出し方は、TQueryコンポーネントとTStoredProcコンポーネント、もしくはIBXのそれらのどれで実行したかによって違いますけど。
但し、エラーの処理はプロシージャ内で行わずにプログラム内で行ったほうが楽ですけど...

編集    削除
ちゃ  2003-09-15 19:43:17  No: 4823  IP: [192.*.*.*]

出力パラメータを定義しようとしましたが、
SQLCODEのデータタイプが分かりません。
教えていただけないでしょうか。

編集    削除
えび  2003-09-15 21:28:57  No: 4824  IP: [192.*.*.*]

SQLコードはWHEN句のオプションでしかないので変数のように取り扱い
できません。
例えばSQLコードが-530だったら、出力パラメータに-530をリテラルで
セットするしかないと思います。(パラメータはINTEGERで)
後、出力パラメータがないこのプロシージャでSUSPENDは必要ないです。

編集    削除
ちゃ  2003-09-16 07:54:18  No: 4825  IP: [192.*.*.*]

ありがとうございました。

編集    削除