诊断应用程序更新的问题可能有点乏味,因为有时这是一个问题,通过一系列的可能性,直到你找到一个适合你的情况,所以我不能告诉你“只是做这个…”,它将解决你的问题。
然而,在您开始研究可能性之前,您的代码有一些问题需要修复,否则您不太可能找到任何地方。
将此更改为
var Count : Integer;
[...]
Count := cdsCustomer1.ApplyUpdates(0);
Assert(Count = 0);
Count := cdsCustomer2.ApplyUpdates(0);
Assert(Count = 0);
关键是,指定-1作为applyUpdates的参数
与你想要的完全相反,也就是说,它允许任何数量的错误
在ApplyUpdates进程中生成。你想要的是
停止任何错误,这是0将要执行的操作,以便您可以找到
ApplyUpdates期间返回了什么错误。
阿尔索
-
当您更新CDSCustomer2时,错误地您正在呼叫
CDSCustomer公司
一
.disablecontrols而不是cdscuster2.disablecontrols。现在看来,此错误将阻止随后正确显示CDSCustomer1。
进行这些更改,编译并运行你的应用程序,也许是其中之一
Count := [...]
威尔给你一个异常消息,它可以识别
你的问题的原因。如果没有:
-
检查在您的服务器上,两个表都定义了主键,以及
然后检查CDS的正确字段是否具有
pfInkey
供应商
设置标志。如果有,请尝试将其设置为pfinwhere。
-
在vcl源文件provider.pas中,查找过程
过程tsqlvolver.internaldoupdate(tree:tupdatetree;updateKind:tupdateKind);
它的最后一行应该是
DoExecSQL(FSQL, FParams);
在它上面放置一个断点,运行你的应用程序,当它在bp上停止时,评估
看看它是否正确。如果是这样,请尝试从用于与服务器一起工作的任何mysql实用工具中执行相同的SQL。