InterBase、FireBird 的自增字段和 FireDAC 数据库控件

自增字段:

InterBase 和 FireBird 数据库,没有自增字段这个字段类型。如果需要自增字段,办法是:

1. 创建一个整数字段;

2. 创建一个生成器(Generator)。

这个 Generator 是 InterBase 和 FireBird 数据库特有的。SQL Server DB 好像没有这个东西。这个东西就是触发一次,它返回一个加一的值。因此,可以通过触发它获得连续加一的值。把这个值填入整数字段,就成了自增字段。

使用方法:

在 Delphi 中,以前我使用自增字段,主要是在3层里面,在客户端 ClientDataSet 里面使用。当时采用的办法是在数据库里面增加一个存储过程,由这个存储过程来调用触发 Generator 产生值,然后客户端远程调用服务器端的一个方法,服务器端的方法再去调用存储过程获得这个值。客户端将获得的值写入 ClientDataSet 里面相应的字段。

现在,FireDAC 有了新的属性,可以让我们直接使用这个 Generator,我做了一个实验程序来测试这个新的方法。步骤如下:

1. 在 Delphi 里面新建一个 VCL 工程,就一个 Form1,拖几个控件,如图:

上图中,FDQuery1 连接了我的测试数据库,语句是:select * from TESTDATA.fdb

测试数据库里面有一个表 TAB_AUTO, 里面一个整数字段名为 ID 和一个 varchar 字段用来随便填写字符串。

测试数据库里面我创建了一个 Generator 名为 NEW_ID。

2. 选中这个 FDQuery1,在其属性面板里面找到 UpdateOptions 那一项,下拉开,找到里面的3个属性如图:

2.1. 上图中,AutoIncFields 的属性填写为我的测试数据库里对应的自增字段名 ID。下拉就能显示并选择;

2.2. GeneratorName 下拉就能看到 NEW_ID 这个 Generator,选择它。注意,下拉能自动看到,建立在 FDConnection1 已经连接数据库的前提下。

2.3. FetchGeneratorsPoint 选择 gpImmediate,默认不是这个值。如果不选,你可以自己试试效果如何。

3. 测试,在 DBGrid 里面增加一条记录,随便填写什么,其 ID 字段会自动填入自增的值。

4. 如果想提交 DBGrid 里面新增的记录到数据库,需要设置 FdQuery1 的属性 CachedUpdates 为 True,默认是 False。

4.1. 提交的代码:FdQuery1.ApplyUpdates(0);

到此搞定这个测试。确实可以看到在 DBGrid1 里面新增一条记录,其 ID 字段里面会自动填入由数据库的 Generator 自动生成的顺序整数值。

那么,如果是3层,客户端需要这个值,该怎么做?如果这个3层是 DataSnap 框架,请看这篇文章:

https://community.idera.com/developer-tools/b/blog/posts/auto-inc-fields-in-rad-server-with-interbase

我自己测试了一下,如果是传统的3层架构,客户端采用 TClientDataSet,则无法在客户端实现自动自增。

发布了121 篇原创文章 · 获赞 21 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/pcplayer/article/details/105492719