1

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

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

在此处输入图像描述

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

在此处输入图像描述

4

3 回答 3

2

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

Required  = true

看,不是空字段或自动增量序列必须是必需的,除非您在数据库中设置了一些默认值。在这种情况下,用户可以将该字段保留为空白,并且数据库在发布之前也采用默认值。

为了解决这个问题,只需Required = false在对象检查器中设置字段 ID。

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

于 2017-06-27T12:11:51.620 回答
0

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

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

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

于 2014-09-17T06:41:29.450 回答
0

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

于 2014-09-16T16:29:23.067 回答