gpt4 book ai didi

delphi - PostgreSQL 上的 UniDac : no value on serial (autoincrement) field after insert

转载 作者:行者123 更新时间:2023-11-29 12:00:26 27 4
gpt4 key购买 nike

在我的应用程序中,用户可以向数据库中添加一些记录。我正在使用 UniDac 4.6.12 组件。

对于自动增量字段,我们使用的是 serial PostgreSQL 类型,我没有在我的应用程序中触及这个字段的值。但是,在 Post 记录之后,字段的值为 0。此外,我从以下位置获得 0:

Q := dmMain.aqrParts.LastInsertId;

如果我刷新数据集,记录会出现填充序列字段值,但这对用户来说不是很舒服的方式,因为表有很多记录,要获取一些记录才能工作,用户需要设置很多过滤器。

我使用数据集的这种属性:

  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)设置

aqrParts.Options.DefaultValues := True. 

在这种情况下,Id 字段的默认值将设置为“nextval(''parts.spareparts_seq''::regclass)”,并且 Id 字段将自动填充。

2)设置

  aqrParts.SpecificOptions.Values['KeySequence'] := 'spareparts_seq';
aqrParts.SpecificOptions.Values['SequenceMode'] := 'smInsert';

在这种情况下,字段 Id 将从该序列中填充。

关于delphi - PostgreSQL 上的 UniDac : no value on serial (autoincrement) field after insert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003942/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com