サイトアイコン Embarcadero RAD Studio, Delphi, & C++Builder Blogs

FireDACの秘密:最後に挿入された自動生成IDとEnterprise Connectors

Author: Shinji Chikugi

この記事は Eli M. による Secrets Of FireDac: Last Inserted Auto Generated Id And Enterprise Connectors の抄訳です。

 自動インクリメントフィールドがあるテーブルにデータを挿入するとき、一般的にはSQLクエリを使用して新しく作成されたレコードの最後に挿入されたIDを取得します。TFDQueryを使用してINSERTクエリを実行し、続いて、SELECTクエリを実行すれば、新しく挿入された自動インクリメントIDを取得できます。

異なるデータベースには、これを実現するために異なるSQLクエリがあります。 たとえば、MySQLには、LAST_INSERT_ID(例:SELECT LAST_INSERT_ID))という名前で実行できるSELECTクエリ関数があります。 このSELECT文を直接実行するか、FireDAC内蔵の機能を使用することができます。

FireDACには、GetLastAutoGenValueというTFDConnectionコンポーネントから呼び出すことのできる関数が用意されています。 Oracle、InterBase / Firebird、MySQL、MSSQLなどのデータベースをサポートし、最後に挿入されたIDを返します。 それは、最後に挿入されたIDを返すために、異なるデータベースごとに一意のSQLクエリを使用します。 以下はDocWikiのものです。

GetLastAutoGenValueメソッドは、最後に自動生成された値を返します。 意味と結果は、次の表に示すようにDBMSによって異なります。

DBMS

説明

Oracle

AName はシーケンスの名前です。セッションに存在する場合、CurrValue を返します。

InterBase/Firebird

AName はジェネレータの名前です。GEN_ID(0) を返します。

MS SQL Server、MySQL など

セッションで最後に自動生成された値です。

CData社によるEnterprise Connectorsは、実行中のバージョンでGetLastAutoGenValue関数をサポートしていないようですが、SCOPE_IDENTITY()と呼ばれる独自のSQLクエリを持っています。(例:SELECT SCOPE_IDENTITY())。 私はCData Salesforce Enterprise ConnectorでSCOPE_IDENTITY()関数を使用しました。 SCOPE_IDENTITY()は、FireDACのCDataヘルプファイルにはあまり記載されていませんが、ヘルプファイルのSELECT構文で表示されます。

 

[crayon-662d6af6ee00d124016574/]

 

 

 

 

 

モバイルバージョンを終了