问题很简单:我的 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;
这导致抛出相同的异常。