简短故事:
用 Delphi XE 试一试... 对于我的主要项目,这解决了错误。
长故事:
当涉及到三级或更多级嵌套数据集时,在 Delphi 2010 中出现数据库端的任何错误时,我遇到了与您相同的问题。
我之前大量使用的上一个版本是 Delphi 2007 ,没有出现任何问题,因此有可能是在 Delphi 2009 或 Delphi 2010 中引入了不良行为。
我将此问题追溯到客户端的 midas.dll,并且无论您是使用 MidasLib 静态链接 midas 还是动态链接都会发生。Midas "认为" 它从服务器收到的数据包格式错误,并引发异常。此异常会打破“正常”的错误调节过程,因此无法尝试从错误中恢复:OnReconcileError 永远不会触发,并且由于 VCL 此部分内部没有 try/except 块,所以该进程被中止。
我确定这是一个错误,但不确定它是在服务器还是客户端上发生的。当我正在制作一个用于提交支持票据的项目并尝试将其缩减至最小可能时,Delphi XE 发布了,而我正在使用 SA,所以我在最后一分钟得到了它。
下载、安装、配置...然后,我编译了我的支持项目,一切都正常。我编译了我的主要项目:由于此问题和我使用数据库触发器和存储过程引发异常以进行最后的验证或状态/条件更改,因此我面临着与用户的实际问题。一切都正常了。用户收到有意义的错误消息,应用程序恢复了对数据转换和实时重试的能力,或者在某些情况下询问用户该怎么做。
抱歉,在我尝试诊断和向 Embarcadero 报告此问题期间,我找不到解决方法,也许其他人可以在不建议升级的情况下更好地帮助您。
简单的回答是可以的,您可以在彼此嵌套的三个级别的数据集中。我有一些客户端数据集的例子,其中嵌套深度达到了6个级别。实际上,我认为除了内存限制之外,没有嵌套深度的限制。