三层结构中,如何用SQL语句操作客户端数据集?(50分)

  • 主题发起人 主题发起人 laiyongjun
  • 开始时间 开始时间
L

laiyongjun

Unregistered / Unconfirmed
GUEST, unregistred user!
三层结构,用ADOConnection+ADOQuery+DataSetProvider+SocketConnection+ClientDataSet搭建。
if CDSMaster.Active then
//CDSMaster为ClientDataSet的实例
CDSMaster.Active := False;
CDSMaster.CommandText := 'select * from aaa order';
CDSMaster.Execute;
CDSMaster.Active := True;
以上代码将SQL语句发送到服务器,并从服务器上获取数据。但现在有这么一个问题,如果现在我要对客户端的数据集用SQL语句操作(如:Delete,update, insert等),该如何处理?用SQL语句操作完后,还要将操作后的结果提交到服务器。
 
如果用sql语句操作就这样:
CDSMaster.close;
CDSMaster.CommandText := 'update table set .....';//------delete,insert 一样
CDSMaster.Execute;//=====这个语句就已经提交了
你前面写的语句其实用
if CDSMaster.Active then
//CDSMaster为ClientDataSet的实例
CDSMaster.Active := False;
CDSMaster.CommandText := 'select * from aaa order';
CDSMaster.open;
就可以了 open用于需要返回数据的sql执行命令,Execute用于不需要返回数据的sql命令
 
谢谢xinjinren:
我主要是不想改变一条就提交一次,想用SQL语句改变(插入、删除)一批记录后,再统一提交给服务器。
 
也就是说先用SQL语句改变一批客户端数据,然后再统一提交给服务器。
 
如果你要改变一批数据就再数据集open以后 直接再上面操作
删除用CDSMaster.Delete;
编辑用
CDSMaster.edit;
CDSMaster.FieldByName('..').Value:=...
...
CDSMaster.post;
新增用
CDSMaster.Append;
CDSMaster.FieldByName('..').Value:=...
...
CDSMaster.post;
然后ApplyUpdates(0)保存
 
也就是说避开SQL语句操作,可不可以直接在客户端数据集上用SQL语句操作客户端数据?
 
这个是不行的
 
好的,那谢谢了。今天晚上结贴。
 
在客戶端使用
cdsMaster.append;
cdsMaster.delete;
cdsMaster.edit;
最後
cdsMaster.post;
這時數據並沒有更新到服務器上,只是存在客戶端的緩存中了,要做最後一道
cdsMaster.applyupdate(0)
才真正更新.所以在使用這句之前盡情的操作都不會改變服務器上的內容,所以實現了统一提交给服务器
 
cdsMaster.append;
还好操作。
可是
cdsMaster.delete;
cdsMaster.edit;
这两句需要定位数据行,就没有SQL来得直接。定位可以用Locate,除了这个,还有没有更好的办法进行定位?
 
多人接受答案了。
 
后退
顶部