首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniDac on PostgreSQL:插入后串行(自动增量)字段没有值

UniDac on PostgreSQL:插入后串行(自动增量)字段没有值
EN

Stack Overflow用户
提问于 2013-08-01 20:30:43
回答 1查看 1.5K关注 0票数 2

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

对于自动增量字段,我们使用的是serial PostgreSQL类型,在我的应用程序中我不碰这个字段的值。但是,在记录的Post之后,字段的值为0。另外,我从以下几个方面得到0

代码语言:javascript
复制
Q := dmMain.aqrParts.LastInsertId;

如果刷新数据集,记录将以填充的串行字段值出现,但这对用户来说并不舒服,因为表有很多记录,并且要获取一些记录才能工作,用户需要设置大量的筛选器。

我使用这种dataset的属性:

代码语言:javascript
复制
  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
...

有可能解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-02 05:46:24

创建具有串行类型的字段时,PostgreSQL服务器将自动创建序列,此序列的值将用作此字段的默认值。

要自动填充Id字段,可以使用两种方法:

1)设定

代码语言:javascript
复制
aqrParts.Options.DefaultValues := True. 

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

2)设定

代码语言:javascript
复制
  aqrParts.SpecificOptions.Values['KeySequence'] := 'spareparts_seq';
  aqrParts.SpecificOptions.Values['SequenceMode'] := 'smInsert';

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18003942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档