DelphiからFirebirdのストアドプロシージャを実行するには?

解決


権兵衛  2008-02-26 17:55:08  No: 29926  IP: 192.*.*.*

初めまして権兵衛と申します。
いつも参考にさせてもらっています。

質問はタイトルの通り「DelphiからFirebirdのストアドプロシージャを実行するには?」です。
Delphiから引数を渡して、ストアドの結果(構造体)で受け取るなんてことは可能なのでしょうか?

要は、DBに対して検索をさせたい画面で、実際に検索する部分(select)をFirebirdのストアドにやらせて、結果をDelphiで受け取るなんてことがしたいのですが…。

編集 削除
pekesuke  2008-02-27 11:41:58  No: 29927  IP: 192.*.*.*

権兵衛さん。こんにちは。

Firebirdのストアドプロシージャを
SET TERM !! ; 
CREATE PROCEDURE GET_ANS (Param1 varchar(10))
  RETURNS (ans varchar(20))
  AS
    DECLARE VARIABLE W_ANS varchar(20);
  BEGIN
    SELECT ITEM_A FROM TABLE_A
    WHERE ITEM_B = :Param1
    INTO W_ANS;
    IF (W_ANS IS NULL) THEN
      BEGIN
        ans = '';
      END
    ELSE
      BEGIN
        ans = W_ANS;
      END
    END
!! 
SET TERM ; !! 
で作成して
TSQLStoredProcを使用して
var
  Ans: string;
begin
  SQLStoredProc.StoredProckName := 'GET_ANS';
  SQLStoredProc.ParamByName('Param1').AsString := '(キー)';
  SQLStoredProc.ExecProc;
  Ans := SQLStoredProc.ParamByName('ans').AsString;
end;
で出来たと思います。

編集 削除
権兵衛  2008-02-27 16:09:29  No: 29928  IP: 192.*.*.*

pekesukeさん
ありがとうございます。

結果のデータは複数件なので、せっかく教えて頂いた方法では
残念ながら出来ませんでしたので、
IBQueryを使用して
「select * from プローシジャ名(IN引数)」で
いけました。

解決です。
何かありましたらまたよろしくお願いします。
ありがとうございました。

編集 削除
権兵衛  2008-02-27 16:09:30  No: 29929  IP: 192.*.*.*

pekesukeさん
ありがとうございます。

結果のデータは複数件なので、せっかく教えて頂いた方法では
残念ながら出来ませんでしたので、
IBQueryを使用して
「select * from プローシジャ名(IN引数)」で
いけました。

解決です。
何かありましたらまたよろしくお願いします。
ありがとうございました。

編集 削除