2Pascal-新时代的Pascal

 找回密码
 立即注册
搜索
热搜: fastreport
查看: 146|回复: 0

转载 FireDAC 获取 INSERT 记录的自增 ID

[复制链接]

90

主题

293

帖子

8万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
82425
发表于 2020-9-11 03:16:08 | 显示全部楼层 |阅读模式
京东数码购物支持本站
原地址
http://bbs.2ccc.com/topic.asp?topicid=587961
by arthsbest (全能中间件)


将数据插入具有自动增量字段的数据库表中时的常见模式是使用 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。

以SQLite数据库为例:

procedure TForm1.FormCreate(Sender: TObject);
begin
  FDConnection1.Params.Clear;
  // 设置数据库驱动类型为 SQLite
  FDConnection1.Params.Add('DriverID=SQLite');
  // 为了测试方便,设置为内存数据库
  FDConnection1.Params.Add('Database=:memory:');
  FDConnection1.Connected := True;

  // 创建一个名为 TBL1 的数据表
  FDConnection1.ExecSQL('CREATE TABLE TBL1(ID INTEGER PRIMARY KEY AUTOINCREMENT, F1 VARCHAR(15), F2 VARCHAR(20))');

  Memo1.Clear;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // 使用 FDQuery 插入一条数据
  FDQuery1.SQL.Text := 'INSERT INTO TBL1(F1, F2) VALUES (:F1, :F2)';
  FDQuery1.ParamByName('F1').AsString := 'Delphi';
  FDQuery1.ParamByName('F2').AsString := 'Object Pascal';
  FDQuery1.ExecSQL;

  // 方法一、 通过 GetLastAutoGenValue 获取自增字段值
  Memo1.Lines.Add(FDConnection1.GetLastAutoGenValue('TBL1'));

  // 方法二、通过查询 last_insert_rowid 函数获取
  FDQuery1.Open('SELECT last_insert_rowid()');
  Memo1.Lines.Add(FDQuery1.Fields[0].Value);

  // 打开表
  FDQuery1.Open('SELECT * FROM TBL1');
end;


(C)(P)Flying Wang
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|新时代Pascal论坛

GMT+8, 2021-1-23 09:07 , Processed in 0.085262 second(s), 25 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表