我的软件中有以下 DBX 结构:
TSQLDataSet -> TDataSetProvider -> TClientDataSet
我的 TClientDataSet 中的一个字段将Required 属性设置为false,因为该字段会根据数据库(Firebird)上的触发器和生成器自动递增。
但是,在配置了不需要此字段的 TSQLDataSet 和 TClientDataSet 之后,当我尝试从 TClientDataSet 中读取此字段时,我得到了非常奇怪的结果。我怀疑我可能需要做一些额外的事情来强制我的 TClientDataSet 在这种情况下获取该字段的值。
我在这里想念什么?
提前致谢。
编辑
Required 属性的帮助文件说明了这一点,但我不太明白它要我做什么。
描述
指定是否需要字段的非空值。
使用必填来确定字段是否需要值或该字段是否可以为空。
如果字段是使用字段编辑器创建的,则此属性是根据基础表设置的。对于必须具有值(例如,密码或部件号)但基础表不需要该字段的字段,将 Required 设置为 true 的应用程序必须编写 OnValidate 事件处理程序以强制执行该属性。
当Required 属性反映基础数据库表的属性时,尝试发布应用空值会导致引发异常。当基础表不需要该字段时,将 Required 属性设置为 true 的应用程序应在 OnValidate 事件处理程序中针对空值引发 EDatabaseError 异常,以实现相同的结果。
编辑 2
忘了说:在 TDataSetProvider 和 TClientDataSet 之间,有一个 DataSnap 层(TClientDataSet 连接是通过 DataSnap 驱动建立的)。
编辑 3
我用这个 DataSnap 设置创建了一个小测试用例,它运行良好。该项目是遗留的,混乱的,我想要么我在某个地方配置了一个模糊的选项,这让我很痛苦,要么我偶然发现了一个 DataSnap 错误。