通常,我发现这个设置可以完美地工作,但是对于这个特定的项目,我遇到了一个问题:ApplyUpdates()无提示失败,并且sql Server数据没有更新.在我的精简版调试项目中,除了一个调用它的按钮单击处理程序之外,我唯一的代码是:
procedure TForm1.ApplyUpdates;var Errors : Integer;begin Errors := ClIEntDataSet1.ApplyUpdates(0); Caption := IntToStr(Errors) + '/' + IntToStr(ClIEntDataSet1.ChangeCount);end;
执行此 *** 作后,表单的标题当然应为0/0,但它实际上是0/1.所以从表面上看,没有发生任何错误,但CDS的ChangeCount没有被重置为零.我的问题是,ApplyUpdates如何不返回任何错误,但服务器数据集不会更新.
Fwiw,我添加了ChangeCount显示作为我调试问题的努力的一部分.但我担心我无法按照DataSetProvIDer与其DataSet之间的“对话”细节进行 *** 作,以在服务器上应用更新.
解决方法 我最近在一个快速的项目中遇到了这个问题,我没有预先设置OnReconcileError处理程序,如@mjn所查询的那样.一旦我设置了OnReconcileError处理程序,很明显问题是提供程序的TsqlResolver无法识别要更新的行. Iirc,ReconcileErrord出窗体上的消息是“无法找到记录.没有指定密钥”的效果.
所以,我尝试的第一件事就是把它包含在我的CDS的AfterOpen中:
CDS1.FIElds[0].ProvIDerFlags := [pfinkey];
(CDS1.FIElds [0]是数据集的PK字段)
与我的期望相反,这并没有解决它.在我挠了一会儿之后,我仔细查看了服务器,发现我使用的最近重新创建的表没有主键索引.
一旦我在服务器上创建了主键索引,ApplyUpdates问题就消失了.
然而,令我困惑的是,你的q提示,我删除了我的服务器表上的主键索引,问题还没有再次开始(!).我猜这是由于我的机器上的某种缓存效应,但我真的不想立即重启它来调查.
总结以上是内存溢出为你收集整理的delphi – TClientDataSet.ApplyUpdates()不应用更新全部内容,希望文章能够帮你解决delphi – TClientDataSet.ApplyUpdates()不应用更新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)