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 

AName is the name of a sequence. The method returns CurrValue if it exists in the session. 

InterBase / Firebird 

AName is the name of a generator. The method returns GEN_ID(0). 

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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝈蝈(GuoGuo)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值