UniDac on PostgreSQL: no value on serial (autoincrement) field after insert
在我的应用程序中,用户可以向数据库添加一些记录。
我正在使用UniDac 4.6.12组件。
对于自动增量字段,我们使用的是
但是,在记录
另外,我从以下位置得到0:
1 | Q := dmMain.aqrParts.LastInsertId; |
如果我刷新数据集,记录将显示为已填充的串行字段值,但对用户来说并不方便,因为表有很多记录,并且要提取一些记录才能工作,因此用户需要设置很多过滤器。
我使用数据集的这种属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | object aqrParts: TUniQuery Connection = psqlConnection SQL.Strings = ( 'SELECT * FROM parts.spareparts' 'LIMIT 200') SpecificOptions.Strings = ( 'PostgreSQL.UnpreparedExecute=True') BeforePost = aqrPartsBeforePost AfterPost = aqrPartsAfterPost Left = 32 Top = 72 object aqrPartsId: TIntegerField AutoGenerateValue = arAutoInc FieldName = 'id' Visible = False end ... |
有可能解决这个问题吗?
当您创建具有序列类型的字段时,PostgreSQL服务器会自动创建一个序列,并且该序列中的值将用作该字段的默认值
要自动填充ID字段,您可以使用两种方法:
1)设置
1 | aqrParts.Options.DefaultValues := True. |
在这种情况下,Id字段的默认值将设置为" nextval(''parts.spareparts_seq'':: regclass)",并且ID字段将自动填充。
2)设置
1 2 | aqrParts.SpecificOptions.Values['KeySequence'] := 'spareparts_seq'; aqrParts.SpecificOptions.Values['SequenceMode'] := 'smInsert'; |
在这种情况下,将根据此序列填充字段ID。
有关PostgreSQL序列操作函数的本页建议您在插入之前,可以使用
引用
上的文档