TDataSetProvider.ApplyUpdates有时保存不了数据

linghengmao 2009-12-22 03:30:01
DataSetProvider.dataset:= adoquery.
if clientDataset.changeCount > 0 then
begin
clientDataset.post;
DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
end.

请问大家有没有碰到数据有时保存不了的问题?如有,一般是如何解决的?
我有时会碰到这样的问题,不论你再怎么增加修改。
只有退出那界面再进去再增加修改才可以。
当然出现这种情况并不多。
...全文
284 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
linghengmao 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 dingnifei123 的回复:]
说实话,俺还是觉得DataSetProvider.ApplyUpdates一直不太稳定,

要不就是俺什么地方设置错了,

强烈建议用sql语句来更新,

可观可测~抓的着看得见~~~
[/Quote]
我现在的做法不是单条记录更新的,而是多条更新,比如打开了20条记录,用户就在那20记录中修改了其中的两条,
如用SQL更新,很麻烦吧.
Dingnifei123 2010-01-01
  • 打赏
  • 举报
回复
说实话,俺还是觉得DataSetProvider.ApplyUpdates一直不太稳定,

要不就是俺什么地方设置错了,

强烈建议用sql语句来更新,

可观可测~抓的着看得见~~~
raddy 2009-12-31
  • 打赏
  • 举报
回复
我想有时是网络或是服务器的问题!你可以调用一下它的报错信息。另外,把参数0改为-1。
linghengmao 2009-12-31
  • 打赏
  • 举报
回复
我一直也觉得奇怪,怎么偶尔会出现保存不了呢?
dd_zhouqian 2009-12-28
  • 打赏
  • 举报
回复
楼主我来顶的
wxsan 2009-12-28
  • 打赏
  • 举报
回复
DataSetProvider.dataset:= adoquery.
if clientDataset.changeCount > 0 then
begin
clientDataset.post;
DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
clientDataset.MergeChangeLog;
end.
xcc610 2009-12-26
  • 打赏
  • 举报
回复
帮顶
linghengmao 2009-12-26
  • 打赏
  • 举报
回复
还有人碰到类似的情况吗?
linghengmao 2009-12-23
  • 打赏
  • 举报
回复
自己顶。
jalphi 2009-12-22
  • 打赏
  • 举报
回复
使用midas技术的时候,注意ADODataset(TADOQuery继承自它)的resolvetodataset属性的设置。
该属性决定更新语句的产生是有adoquery产生还是由TClientDatset产生。

在applyupdates后,判断一下TClientDataset.changecount,
然后再调用TClientDataset.MergeChangeLog;
linghengmao 2009-12-22
  • 打赏
  • 举报
回复
不好意思,我放上来的程序忘了加begin end了。
应该是这样:
if clientDataset.changecount>0 then
begin
clientDataset.post;
try
DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
result:= true;
except
result:= False;
raise;
end;
end;
CACACACACA 2009-12-22
  • 打赏
  • 举报
回复
我的程序是这样的:
if clientDataset.changecount>0 then
clientDataset.post;
try
DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
result:= true;
except
result:= False;
raise;
end;

//---------
先POST , 再判断changecount>0 then applyupdates....
你读DELTA的时候,如果为EMPTY会出个异常。不为空(如果数据集未保存,会自动POST一下的)
wzwcn 2009-12-22
  • 打赏
  • 举报
回复
这样:
if clientDataset.changecount>0 then
clientDataset.post;
try
DataSetProvider.ApplyUpdates(clientDataset.delta,-1, outError); //第二个参数改为-1
result:= outError=0; //只有outError为0才没有错误
except
result:= False;
raise;
end;
linghengmao 2009-12-22
  • 打赏
  • 举报
回复
我的程序是这样的:
if clientDataset.changecount>0 then
clientDataset.post;
try
DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
result:= true;
except
result:= False;
raise;
end;

它也没有抱什么错,奇怪了。而且只是偶尔会出错,退出界面再进去重新输入就可以了。
很奇怪。
wooden954 2009-12-22
  • 打赏
  • 举报
回复
也可能是你在保存数据过程中出现了例外,而你的程序没有做相应处理,导致保存过程执行失败或根本未被执行。
wooden954 2009-12-22
  • 打赏
  • 举报
回复
DataSetProvider.dataset:= adoquery.
if clientDataset.changeCount > 0 then
begin
try
clientDataset.post;
DataSetProvider.ApplyUpdates(clientDataset.delta,0, outError);
except
;
end;
end.

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧