Clientdataset.ApplyUpdates 的问题求助 ( 积分: 10 )

  • 主题发起人 主题发起人 青云
  • 开始时间 开始时间

青云

Unregistered / Unconfirmed
GUEST, unregistred user!
我调用Clientdataset.ApplyUpdates,出现record not found or changed by another user。
具体操作如下:先Clientdataset.insert;Clientdataset.ApplyUpdates
但当我再Clientdataset.edit,Clientdataset.ApplyUpdates时就出错了。

有人提醒我用
self.ClientDataSet1.ApplyUpdates(-1);
ClientDataSet1.refresh;
这样的方法就能搞定。
其实,如果我在DbGrid上一次性做个多条记录的更改,提交时仍然报错。

我一直使用AdoQuery组件,而它解决不了多表关联,单表更新的问题,所以只能使用ClientDataSet了,不过对这个使用还不太熟练;
 
我调用Clientdataset.ApplyUpdates,出现record not found or changed by another user。
具体操作如下:先Clientdataset.insert;Clientdataset.ApplyUpdates
但当我再Clientdataset.edit,Clientdataset.ApplyUpdates时就出错了。

有人提醒我用
self.ClientDataSet1.ApplyUpdates(-1);
ClientDataSet1.refresh;
这样的方法就能搞定。
其实,如果我在DbGrid上一次性做个多条记录的更改,提交时仍然报错。

我一直使用AdoQuery组件,而它解决不了多表关联,单表更新的问题,所以只能使用ClientDataSet了,不过对这个使用还不太熟练;
 
我使用Sql Server 数据库更新多条记录 没有问题;
但是使用 Oracle 就不能同时更新多条记录就报
“record not found or changed by another user。

这样的错误。
真奇怪,难道 ClientDataSet不能很好的支持Oracle ?
 
帮顶

--------签名档---------------------------

惊爆开源站

http://www.source520.com http://www.source520.net
80G源码电子书免费免注册下载,大量精辟技术文档库随时更新
 
Clientdataset.insert;
clientdataset.post;
if clientdataset.changecount>0 then
Clientdataset.ApplyUpdates(-1);
其它的應該也要這樣的。試下看啦。
 
没有指定主键字段,默认就按全部字段检索更新,当更新过一次后,只要有一个字段改变过,然后第二次再更新的话就找不到原来的那条记录,所以提示被其他用户更新过了
如果没有指定按照主键更新,那么就要每更新完一次,重新调一次数据库,就类似使用 Refresh
1、双击数据集,选择主键字段,设定 ProviderFlags 的 pfInKey 为 True
2、DataSetProvider 的 UpdateMode 设为 upWhereKeyOnly
这个情况类似于 BDE 的 Query 使用 UpdateSQL 对象更新数据需要制定 Key Field 一样
另,更新多条记录还要设定 DataSetProvider 属性 Options 的 poAllowMultiRecordUpdates 为 True
 
后退
顶部