50分求教MIDAS的一个小问题(遇到过的会很容易吧)(50分)

  • 主题发起人 主题发起人 HHSH
  • 开始时间 开始时间
H

HHSH

Unregistered / Unconfirmed
GUEST, unregistred user!
我初次使用Tclinetdataset的两个过程savetofile和loadfromfile,但遇到了难题:我把后
台服务器上的数据用savetofile到了一个.cds文件中,之后,进行了删除,再用loadfromfile
导出,一切顺利,但是,再想保存到后台服务器中时,难矣!!!我用的是Applyupdates(-1)
怎么也不能成功。请问原因及解决办法?
 
没明白,贴代码
 
你说的不清楚阿!
删除了怎么load的啊?
 
他一定是把数据删除了~~~
呵呵
 
我的意思是:我先用savetofile对clientdataset中的数据(从后台取出的)进行了保存
,之后,用其他方法(sql)操纵了后台数据。现在,想再恢复,便用loadfromfile把.cds
文件中保存的数据再导入到clientdataset中,这样很顺利,但是想把这些在
clientdataset中的数据再保存回后台却不行!
(用的是clientdataset。ApplyUpdates(-1)).这样明白了吧?
 
十有八九是没删干净,主键冲突之类的错.
 
循环一下clientdataset用sql语句插入到数据库中就行啦。[:D]
 
请把clientdataset.storedefs := True;
 
给出错误信息吧
 
你用clientdataset.loadfromfile以后,clientdataset已经不再指向原来的数据源了,
clientdataset.ApplyUpdates(-1)当然不管用了,
建议你用两个clientdataset,一个连接后台数据库,一个loadfromfile,然后再把数据
倒一下就行了。
 
TO billxu:
能不能让它再指向原来的数据源呢?如果可以不就省事了。
若实在不行,就采取用两个CDS的办法。请提示一下两个CDS“导”数据的代码,我还没
用过。不好意思。
 
TO 鼠标:
若该办法可行,也算可以。但是若列很多,写INSERT语句是不是很麻烦。再说,也不知
到底行不行,老兄试过吗?
 
偶好久没有看过数据库了
但是我想这样应该不可以!
因为 TClientDataSet他在更新数据的时候,只是将需要更新的数据提交到中间层,
然而,你先Save数据,再恢复它,这些数据中保留的只是原先的数据,
同时也保存了原先的状态,它们并不知道你要恢复哪些数据。
比如你有一个表它在ClientDataSet中:
ID Name 状态
1 HHSH 未更新
2 CJ 未更新
3 luyear 未更新
4 Celestialdo
g 未更新

接着你把它们用TClientDataSet Save到Disk上
然后删除了ID为4的记录,并且已经提交了。
现在你把Disk上的数据Load到ClientDataSet中,然而ClientDataSet它的信息还是和上面一样:
ID Name 状态
1 HHSH 未更新
2 CJ 未更新
3 luyear 未更新
4 Celestialdo
g 未更新
你提交它,它怎么会知道你要恢复ID号为4的记录呢?
以上观点纯属我猜想,因为一直很忙未证实过。
 
我也是MIDAS的初学者,但据我所知:应用服务器更新数据实际是处理TClientData.Delta,
即你的操作日志;而你的数据来自于LoadFromFile,Delta可能不记录这种更新。所以这种
情况可能需要自己写代码处理!
 
DelphiProgrammer、Activer说得有理,你保存的是原始数据,没有做插入操作,所以中间
层不会生成插入的SQL语句,当然也不会保存到后台服务器中去。
你可以这样,做一个和你所使用的ClientDataSet一样的ClientDataSet,一个(假设为A)
负责LOAD,一个(假设为B)连接到应用服务器,OPEN,把A中的数据插入到B中,然后提交
B即可。
 
TO billxu 和 blbird:
你们二位说的方法我试过了。好象不行。代码如下:
cds_khbz_load.loadfromfile('khbz.cds');
cds_khbz.open;
cds_khbz.Appenddata(cds_khbz_load.data,false);
CDS_khbz.Applyupdates(-1);
cds_khbz还是不能保存!代码有问题吗?
请二位和大家继续关注,谢谢!
 
我总是觉得你们搞的太复杂了吧?不就是恢复点数据吗?把DELTA直接传过去?虽然这样比较不标准...
 
接受答案了。
 
后退
顶部