2

问题很简单:我的 Firebird 2.1.4 数据库中有触发器和生成器,可以在每次插入时自动增加列。

系统架构如下:

TSQLConnection > TSQLDataSet -> TDataSetProvider -> (DataSnap) -> TClientDataSet -> TDataSource

但是,如果我尝试在我的 TClientDataSet 中发布一些缺少列的更新,Delphi 会这样抱怨:

Field 'XXX' must have a value

如果我在缺少这些字段的情况下使用 SQL 插入语句,则会插入行并且触发器和生成器按预期工作。

我如何让 Delphi(DBX、DataSnap 等)理解我想要做什么(并允许它)?

编辑

根据@mj2008 的评论提供更多信息:此 TClientDataSet 是在运行时使用 CloneCursor 方法创建的。调用 CloneCursor 后,我将此字段的 Required 属性设置为 False。它对这个问题没有帮助。例子:

myCds.CloneCursor(otherCds, True);
myCds.FieldByName('XXX').Required := False;

这导致抛出相同的异常。

4

2 回答 2

2

我也必须将 TSQLDataset 的 Required 属性设置为 False。这解决了这个问题。

于 2012-01-26T17:03:38.723 回答
0

补充一下:当您进行 TClientDataset 设置时,更新最终会发送到数据访问组件,在本例中为 TSQLDataset,因此即使 TClientdataset 不需要该字段的值,如果数据访问组件需要它引发错误。

即使数据来自 TADODataset、TIbDataset 或其他任何东西,它也是一样的。

于 2012-01-26T18:22:36.893 回答