Delphi不允许我插入缺少列的行,但是使用这些字段的触发器和生成器

时间:2012-01-26 16:24:04

标签: delphi firebird tclientdataset dbx

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

系统架构如下:

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

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

Field 'XXX' must have a value

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

如何让Delphi(DBX,DataSnap等)了解我正在尝试做什么(并允许它)?

修改

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

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

这会导致抛出相同的异常。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

即使数据来自TADODataset,TIbDataset或其他任何内容,它也会相同。