Firebird - 字段ID必须具有值

时间:2014-09-16 14:43:42

标签: delphi firebird firebird-embedded

我的Firebird字段(ID)的功能类似于autoinc字段(它有一个生成器和一个触发器)。当我使用Firebird Maestro并进行一些手动插入时,autoinc字段功能正常(我只需刷新表格)。但是,在Delphi方面(使用FireDac)是另一个问题。当我尝试插入时,我会收到一条警告消息" Field' ID'必须有价值"。到底是怎么回事?有什么方法可以解决这个问题吗?

编辑: 正如您在图片中看到的那样,该字段已添加,但表格保持插入模式并显示错误!

enter image description here

Edit2:我已经关闭了ID的要求,但仍然存在错误(我已打开和关闭连接以防万一,因此它不会留在内存中)

enter image description here

3 个答案:

答案 0 :(得分:0)

将-1设置为ID。在您的情况下,TField必需属性可能是正确的。

答案 1 :(得分:0)

如果数据集字段中存在持久TField并且设置了所需选项,则除非分配了值,否则Post将不会成功。在这种情况下,不是拒绝插入的数据库,而是数据访问框架。

因此,检查数据模块中的数据集组件是否使用持久字段,如果是,请检查字段选项。

也许您也可以在您的问题中发布相关的DFM代码。没有完整的信息,很难回答你的问题。

答案 2 :(得分:0)

当您创建连接并配置表以获取数据时,Delphi会识别所有非空字段并自动设置Required property = true。

Required  = true

看起来,除非在数据库中设置了一些默认值,否则不需要空字段或自动增量序列。在这种情况下,用户可以将该字段留空,并且数据库也会在发布之前采用默认值。

要解决此问题,只需在对象检查器中为字段ID设置Required = false

注意:您更改了数据库中的字段属性NOT REQUIRED,但是自从您开始在表单中拖动表格时,Delphi中的字段属性为required = true。表和fdTable组件对数据库中的修改不敏感。要检查我在下面描述的行为,请删除新表或再次为您的表执行delete all fieldadd all field