首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理postgresql表的唯一和身份自动增量云的最佳方法

处理postgresql表的唯一和身份自动增量云的最佳方法
EN

Stack Overflow用户
提问于 2019-06-12 23:56:17
回答 1查看 192关注 0票数 1

我得到这个错误:"bankid“字段必须有一个值。

为了解决这个问题,我必须使用Uniquery字段编辑器添加字段,并将"required“属性设置为False,同时将autogeneratedvalue设置为arAutoInc。

这是唯一的方法吗?向Uniquery添加字段?

表:

代码语言:javascript
复制
CREATE TABLE public.banks (
  bank    varchar(50),
  branch  varchar(80),
  "no"    varchar(30),
  bankid  integer NOT NULL GENERATED ALWAYS AS IDENTITY,
)
WITH (
    OIDS = FALSE
  );

唯一组件:

代码语言:javascript
复制
  object UniQuery2: TUniQuery
    SQLInsert.Strings = (
      'INSERT INTO "Banks"'
      '  (bank, branch, no)'
      'VALUES'
      '  (:bank, :branch, :no)  RETURNING bankid;')
    SQLUpdate.Strings = (
      'update "Banks" set bank=:bank, branch=:branch, "no"=:no'
      'where bankid=:bankid')
    SQLLock.Strings = (
      '')
    SQLRefresh.Strings = (
      'SELECT bank, branch, no, bankid FROM "Banks"'
      'WHERE'
      '  bankid = :bankid')
    SQLRecCount.Strings = (
      'SELECT count(*) FROM ('
      'SELECT * FROM "Banks"'
      ''
      ') t')
    Connection = UniConnection1
    SQL.Strings = (
      'select * from "Banks" order by bank,branch,"no"')
    Options.ReturnParams = True
    Left = 64
    Top = 80
    object UniQuery2bank: TStringField
      FieldName = 'bank'
      Required = True
      Size = 50
    end
    object UniQuery2branch: TStringField
      FieldName = 'branch'
      Required = True
      Size = 80
    end
    object UniQuery2no: TStringField
      FieldName = 'no'
      Required = True
      Size = 30
    end
    object UniQuery2bankid: TIntegerField
      AutoGenerateValue = arAutoInc
      FieldName = 'bankid'
    end

  end

delphi代码:

代码语言:javascript
复制
UniQuery2.Options.DefaultValues := True;
uniquery2.open;
UniQuery2.Append;
UniQuery2.fieldByName('bank').AsString:=sEdit1.Text;
UniQuery2.fieldByName('branch').AsString:=sEdit2.Text;
UniQuery2.fieldByName('no').AsString:=sEdit2.Text;
UniQuery2.Post;

delphi 10.2.3 postgresql 10.8

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 06:08:25

Ago解决方案的参数化形式可以解决Uniquery未附加到数据源和Dbgrid时的问题

代码语言:javascript
复制
uq.sql.text:='upadte table1 set field1=:f';
uq.parambyname('f').asinteger:=somevalue;
uq.execute;

当uniquery合并了数据和计算字段以便与dbgrid一起使用时:

代码语言:javascript
复制
uq.append;
uq.fieldbyname('field1').asinteger:=somevalue;
//****
uq.filedbyname('id').required:=false;
//****
uq.post;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56566189

复制
相关文章

相似问题

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