フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: Firebird の Returning が返す値を IBX で処理するには?
DEKO
管理者
投稿数: 2651
Firebird の Returning が返す値を IBX で処理するには?
on: 2013/05/11 04:47 Sat

Firebird は Insert 文でジェネレータを使った場合、そのジェネレータの値を RETURNING で取得できます。これは Firebid の FAQ にも載っています。

[How to get the last insert ID?]
http://www.firebirdfaq.org/faq243/

「IBX ではこの RETURNING が返す値を処理できない」 と、あちこちで書かれているようですが…できるっつーのよ!IBConsole のインタラクティブ SQL で試してみるとちゃんと RETURNING の値が取れる事を確認できると思います…つまり、IBX でも RETURNING を処理できるのです。

with IBSQL1 do
begin
SQL.Clear;
SQL.Add('INSERT INTO MST_TEST ');
SQL.Add('( ');
SQL.Add(' ID, ');
SQL.Add(' NAME ');
SQL.Add(') ');
SQL.Add('VALUES ');
SQL.Add('( ');
SQL.Add(' GEN_ID(GEN_TEST, 1),');
SQL.Add(' :NAME ');
SQL.Add(') ');
SQL.Add('RETURNING ID ');

ParamByName('NAME').AsString := 'John Smith';
ExecQuery;

iNewID := Fields[0].AsInteger; // FieldByName('ID').AsInteger でもいい
end;

 
Delphi のコードだとこんな感じです。TIBQuery ではなく、TIBSQL を使うのがミソです。

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.023 sec.