FB3已经支持在主键字段上创建自增字段,语法如下:
B31_1 INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
注:
1、B31_1为字段名;
2、FB3的自增字段仍是生成器(Generator)的方式;
一直以来不曾用过FB3的自增字段,今天建了一个表B31试一下。
with uniQuery do
begin
KeyFields:='B31_1';
UpdatingTable:='B31';
SQL.Text:='select * from B31 order by B31';
Open;
end
接着写新增数据行的代码:
with UniQuery do
begin
Append;
//FieldByName('B31_1').AsInteger:=i;
Post;
ApplyUpdates();
end;
但是当执行到Post;就会出错,提示字段'B31_1'需要一个“值”。
问了一些Q群的群友,答案都莫衷一是。因此,只能自己找些办法一试了。后来通过UniDAC的帮助文件才得到答案。
为使UniQuery能回传自增字段的序号,需要设置UniQuery中的SpecificOptions属性(双击UniQuery后,选择Options选项卡)。其中,GeneratorMode属性设置返回自增字段的动作,是gmInsert或是gmPost;GeneratorStep属性设置步长;KeyGenerator设置自增字段生成器的名称(这是重点);而且,必须设定主键字段。也即是说KeyGenerator必须和KeyFrelds配合使用。
这样当执行到Append、或是Post语句就会得到返回的自增序号。