delphi 三层 ApplyUpdates 无法保存第二次修改的数据

microd 2013-11-08 11:57:58
delphi 2010 datasnap

服务器端: adocon+adoquery+DataSetProvider
客户端:TSQLConnection->TDSProviderConnection->TClientDataSet
代码如下
--打开数据集 (没有问题)
procedure TfrmMain.Button2Click(Sender: TObject);
begin
cdsTBA.CommandText := 'select * from TPADBA';
if cdsTBA.active then cdsTBA.Close;
cdsTBA.Open;
end;

--保存数据 (没有任何报错提示)
procedure TfrmMain.Button3Click(Sender: TObject);
var
NumError:integer;
begin
cdsTBA.ApplyUpdates(0);
cdsTBB.ApplyUpdates(0);
end;

-------------------
问题:
第一次修改保存没有问题,在点击了第一次保存后在修改,然后再点保存,没有任何提示但数据无法就是保存到后台
-------------------
DataSetProvider 属性设置 :
updatemodel = true;
options.popro..chnages := true;
options.poallowcomandtext := true
ClientDataSet(cdsTBB) 属性设置 :
ClientDataSet.的TField keyfields 有设值
...全文
297 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
babydog01 2013-11-25
  • 打赏
  • 举报
回复
引用 4 楼 SKY1006 的回复:
你的后台数据库的字段可能有默认值,第一次修改更新后,后台数据库可能产生默认值,而ApplyUpdates(0)并不能把数据库产生的数据更新到客户端,当客户端数据与后台数据库数据不一致时,ApplyUpdates(0)就不能更新
+1 尤其是主键。
我看见佛 2013-11-25
  • 打赏
  • 举报
回复
引用 4 楼 SKY1006 的回复:
你的后台数据库的字段可能有默认值,第一次修改更新后,后台数据库可能产生默认值,而ApplyUpdates(0)并不能把数据库产生的数据更新到客户端,当客户端数据与后台数据库数据不一致时,ApplyUpdates(0)就不能更新
lyhoo163说的不对,支持此楼见解。记得参数为-1可以继续提交。0是遇错终止吧。
hhhfff2010 2013-11-25
  • 打赏
  • 举报
回复
............还没更新到数据库,只是作为缓存,楼主试下 applyUpdates(-1) applyUpdates(1) 貌似要先post 再,,,提交到服务器,
SKY1006 2013-11-24
  • 打赏
  • 举报
回复
你的后台数据库的字段可能有默认值,第一次修改更新后,后台数据库可能产生默认值,而ApplyUpdates(0)并不能把数据库产生的数据更新到客户端,当客户端数据与后台数据库数据不一致时,ApplyUpdates(0)就不能更新
lyhoo163 2013-11-24
  • 打赏
  • 举报
回复
这是三层的老问题,对于新的数据TDate的 ApplyUpdates(0)可以更新,但对于修改数据,无法更新。因为是三层...,建议使用SQL语句更新吧。
zbdzjx 2013-11-21
  • 打赏
  • 举报
回复
也没用过 猜测:第一次保存后,要重新读一次数据
雄牛 2013-11-21
  • 打赏
  • 举报
回复
没用过... 纯路过....

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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