FireDAC 获取 INSERT 记录的自增 ID
将数据插入具有自动增量字段的数据库表中时的常见模式是使用 SQL 查询来选择新创建的记录的最后插入ID。使用 TFDQuery 运行 INSERT 查询后,您可以运行第二个查询来获取新插入的自动增量 ID。例如,MySQL 具有一个 SELECT 查询函数,您可以运行该函数,称为 LAST_INSERT_ID(),比如:SELECT LAST_INSERT_ID() ,但是,这种方法耦合度太高,不同的数据库,使用的函数也不一样。
FireDAC 提供了一个函数,您可以通过 TFDConnection 组件调用该函数,称为GetLastAutoGenValue。它将返回最后插入的 ID,支持许多不同的数据库,包括 Oracle、InterBase/Firebird、MySQL、MSSQL 和其他一些数据库。它使用每个不同数据库的任何唯一 SQL 查询来返回上次插入的 ID。以下是来自 DocWiki 。
DBMS |
Description |
---|---|
Oracle |
|
InterBase / Firebird |
|
MS SQL Server, MySQL etc |
The last autogenerated value in the session. |
以SQLite数据库为例:
1 procedure TForm1.FormCreate(Sender: TObject); 2 begin 3 FDConnection1.Params.Clear; 4 // 设置数据库驱动类型为 SQLite 5 FDConnection1.Params.Add('DriverID=SQLite'); 6 // 为了测试方便,设置为内存数据库 7 FDConnection1.Params.Add('Database=:memory:'); 8 FDConnection1.Connected := True; 9 10 // 创建一个名为 TBL1 的数据表 11 FDConnection1.ExecSQL('CREATE TABLE TBL1(ID INTEGER PRIMARY KEY AUTOINCREMENT, F1 VARCHAR(15), F2 VARCHAR(20))'); 12 13 Memo1.Clear; 14 end; 15 16 procedure TForm1.Button1Click(Sender: TObject); 17 begin 18 // 使用 FDQuery 插入一条数据 19 FDQuery1.SQL.Text := 'INSERT INTO TBL1(F1, F2) VALUES (:F1, :F2)'; 20 FDQuery1.ParamByName('F1').AsString := 'Delphi'; 21 FDQuery1.ParamByName('F2').AsString := 'Object Pascal'; 22 FDQuery1.ExecSQL; 23 24 // 方法一、 通过 GetLastAutoGenValue 获取自增字段值 25 Memo1.Lines.Add(FDConnection1.GetLastAutoGenValue('TBL1')); 26 27 // 方法二、通过查询 last_insert_rowid 函数获取 28 FDQuery1.Open('SELECT last_insert_rowid()'); 29 Memo1.Lines.Add(FDQuery1.Fields[0].Value); 30 31 // 打开表 32 FDQuery1.Open('SELECT * FROM TBL1'); 33 end;
运行截图如下:
奥利给!
作者:
oldfarmer
出处:
http://www.cnblogs.com/rtcmw/
欢迎探讨交流 DELPHI 相关技术,QQ:64445322 QQ群:734515869
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。