如何在Delphi 10(Firemonkey)中获取SQLite最后插入记录的ID
获取SQLite自增表最后插入ID的几种方法(Delphi 10 Firemonkey)
嗨,这个问题我太熟了!在Delphi 10搭配Firemonkey和SQLite开发时,要拿到自增字段的最后插入ID,有两种非常靠谱的实现方式,我给你一步步讲清楚:
方法一:用SQLite原生函数last_insert_rowid()
这是最通用的方案,不管你的SQLite版本新旧都能用,核心是利用SQLite内置的last_insert_rowid()函数——它会返回当前连接中最后一次插入操作生成的自增ID。
修改你的代码如下:
var myQr: TFDQuery; lastID: Integer; begin myQr := TFDQuery.Create(Self); try myQr.Connection := YourFDConnection; // 一定要关联你的FDConnection! with myQr do begin // 构造插入语句(注意:自增ID字段可以不用传值,SQLite会自动生成) SQL.Add('Insert into table1 (_name, _dthr) values (:_name, :_dthr)'); Params.ParamByName('_name').Value := '测试名称'; Params.ParamByName('_dthr').Value := Now; // 执行插入 ExecSQL; // 查询最后插入的ID SQL.Clear; SQL.Add('SELECT last_insert_rowid() AS LastID'); Open; // 获取结果 lastID := FieldByName('LastID').AsInteger; ShowMessage('最后插入的ID是:' + IntToStr(lastID)); end; finally myQr.Free; // 别忘了释放资源 end; end;
注意:这个函数是基于当前数据库连接的,所以必须保证插入和查询用的是同一个连接对象,否则可能拿到其他连接的插入ID。
方法二:用FireDAC的RETURNING语法(更简洁)
如果你的SQLite版本在3.35.0及以上(这个版本之后支持RETURNING子句),可以直接在插入语句里返回自增ID,代码更紧凑:
var myQr: TFDQuery; lastID: Integer; begin myQr := TFDQuery.Create(Self); try myQr.Connection := YourFDConnection; with myQr do begin // 插入语句末尾加RETURNING id,直接返回自增字段的值 SQL.Add('Insert into table1 (_name, _dthr) values (:_name, :_dthr) RETURNING id'); Params.ParamByName('_name').Value := '测试名称'; Params.ParamByName('_dthr').Value := Now; // 这里用Open而不是ExecSQL,因为要接收返回的结果 Open; // 直接获取ID lastID := FieldByName('id').AsInteger; ShowMessage('最后插入的ID是:' + IntToStr(lastID)); end; finally myQr.Free; end; end;
额外提醒:如果一定要传_id参数
如果你因为某些原因必须在插入语句里写_id字段,记得把它的值设为Null,这样SQLite才会自动生成自增ID:
Params.ParamByName('_id').Value := Null;
之后再用上面两种方法之一获取ID就可以了。
内容的提问来源于stack exchange,提问作者Zayn Barcktu
相关产品推荐
相关产品推荐

