delphi xe7 datasnap客户端更新数据之后重新读取显示的行数不对

g58521547 2020-05-30 12:34:51
各位高手大佬,请教如下问题
delphi xe7, datasnap 远程服务器端是fdcquery, mysql,
客户端用cliendataset 刚开始联合查询两个表 (一个是orderlist, 一个是类似结构的purchaselist表格),显示到stringgrid中,
在stringgrid中修改之后,分别用cdslist, cdspurchase applyupdate到数据库,更新之后,要重新读取最新的数据显示出来,但是问题就在于重新联合查询出来的数据行数不正确,比如4行数据,刷新后有时候是1行,也有可能是6,8行。
实际mysql里面的两个表的数据都是对的。
请各位看看什么原因?是不是cds刚刚applyupdate之后,datasetprovider中还没有刷新?

    if (self.cdsHead.Active=false) or (self.cdsList.Active=false) then
begin
showmessage('数据集没有开启不能提交更新。');
exit;
end;

try
if self.cdsHead.ApplyUpdates(0)=0 then
if self.cdsList.ApplyUpdates(0)=0 then
if self.cdsPurchase.ApplyUpdates(0)=0 then
begin
application.MessageBox('提交服务器更新成功。','提示');
end;
except
on E: exception do
showmessage('提交服务器更新出错。'+E.Message);
end;
//更新完成后重新读取数据
cdspurchase.Active:=false;
cdspurchase.CommandText:='UPDATE tbpurchaselist b, tborderlist a '
+'SET b.`autoNumber`=a.`AutoNumber` WHERE '
+'(b.`orderNo`=a.orderno) AND (b.`autono`=a.`AutoNo`)';
cdspurchase.Execute;

self.cdsList.Close;
self.cdsList.CommandText:=
'SELECT a.`AutoNumber`,a.`AutoNo`,a.`GroupMemo`,a.`itemno`,a.`PartNumber`,'
+'a.`CDes`,a.`CQuantity`,a.`CUnit`,a.`Price`,a.`Amount`,a.`CRemark`,'
+'b.`MyCode`,b.`MyDesEN`,b.`MyDesCHN`,b.`MyUnit`,b.`MyQty` ,'
+'b.`autoNumber`,b.`supplycode`,b.`supplyname`,b.`costprice`,'
+'b.`costCurrency`,b.`discount`,b.`costSum`,b.`sremark`,b.`orderno`,'
+'a.`machinetype`,b.`PONo`,b.`Purchased`,b.`Recieved` ,b.`itemno` '
+'FROM tborderlist a LEFT JOIN tbpurchaselist b'
+' ON a.`AutoNumber`=b.`autoNumber` '
+'where a.Orderno="'+ getOrderno + '" order by autono';
self.cdsList.Active := true;
//self.cdslist.indexfieldnames:='autono';
//showmessage('重新读取的记录行数:'+inttostr(self.cdslist.recordcount));
clearrows(sgList);
readDataset(self.cdsList); // 把数据库的记录读取到表格中
...全文
369 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
g58521547 2020-06-18
  • 打赏
  • 举报
回复
提交以后数据库中已经有了实际的数据了。 另外,如果上述的代码执行完以后,把窗体关闭,或者通过窗体上的open tBUTTON重新打开读取数据的话,现实的就是正确的。 所以很奇怪啊,
tanqth 2020-06-07
  • 打赏
  • 举报
回复
简单看你的代码,逻辑上应该是正确的。检查方向,更新后,检查服务器的数据库是否已正常提交。如果在正常提交的情况 下,再检查读取数据的正确性。
g58521547 2020-06-07
  • 打赏
  • 举报
回复
看来没人了知道了?
814123 2020-05-31
  • 打赏
  • 举报
回复
我用的也是datasnap,代码比你的少多了,我用你是FDMemTable内存表代替的CDS,手机上的没有代码给你
g58521547 2020-05-31
  • 打赏
  • 举报
回复
现在我用cds更新提交没有错误,就是提交之后,重新读取记录数,行数就不对。

2,497

社区成员

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

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