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 |
|
InterBase/Firebird |
|
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構文で表示されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// SELECT { [ TOP | DISTINCT ] { * | { [ [ AS ] ] | { | } .* } [ , ... ] } [ INTO csv:// [ filename= ] [ ;delimiter=tab ] ] { FROM [ [ AS ] ] } [ , ... ] [ [ INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } ] JOIN [ ON ] [ [ AS ] ] ] [ ... ] [ WHERE ] [ GROUP BY [ , ... ] [ HAVING ] [ UNION [ ALL ] ] [ ORDER BY [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] ] [ LIMIT [ { OFFSET | , } ] ] } | SCOPE_IDENTITY() |
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition