Have an amazing solution built in RAD Studio? Let us know. Looking for discounts? Visit our Special Offers page!
C++

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構文で表示されます。

 

 

 

 

 

 

See What's New in 12.2 Athens See What's New in 12.2 Athens Dev Days of Summer 2-24

Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Upgrade Today

   Free Delphi Community Edition   Free C++Builder Community Edition

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

IN THE ARTICLES