在我的应用程序中,用户能够向数据库添加一些记录。我正在使用UniDac 4.6.12组件。
对于自动增量字段,我们使用的是serial PostgreSQL类型,在我的应用程序中我不碰这个字段的值。但是,在记录的Post之后,字段的值为0。另外,我从以下几个方面得到0
Q := dmMain.aqrParts.LastInsertId;如果刷新数据集,记录将以填充的串行字段值出现,但这对用户来说并不舒服,因为表有很多记录,并且要获取一些记录才能工作,用户需要设置大量的筛选器。
我使用这种dataset的属性:
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
...有可能解决这个问题吗?
发布于 2013-08-02 05:46:24
创建具有串行类型的字段时,PostgreSQL服务器将自动创建序列,此序列的值将用作此字段的默认值。
要自动填充Id字段,可以使用两种方法:
1)设定
aqrParts.Options.DefaultValues := True. 在这种情况下,Id字段的默认值将被设置为“nextval(‘parts.spareparts_seq’::regclass)”,Id字段将被自动填充。
2)设定
aqrParts.SpecificOptions.Values['KeySequence'] := 'spareparts_seq';
aqrParts.SpecificOptions.Values['SequenceMode'] := 'smInsert';在这种情况下,字段Id将从这个序列中填充。
https://stackoverflow.com/questions/18003942
复制相似问题