如何用TclientDataset控件删除一条记录?(40分)

  • 主题发起人 主题发起人 ggg
  • 开始时间 开始时间
G

ggg

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Tclientdataset控件删除一条记录,出现错误提示,好像Cursor什么的,不记得了。
但库记录刷新后,发现指定记录已被删除。
我的程序是这样写的,望高手诊断!
ClientDataSet2.close;
ClientDataSet2.Provider.DataRequest('delete from tablename where mid=345');
ClientDataSet2.Open;
 
服务端怎么响应DATAREQUEST的?
 
服务端的QUERY要用EXESQL方法。
就没有问题了吧!
 
你使用的是DELPHI4.0吧。我也遇到过这样的问题,但当我将DELPHI4.0的 PACK2#
和 PACK3#打上后,这问题就解决了.
 
运行不返回结果的SQL命令最好采用以下的方法
服务端建立接口
Appserver.ExecSql(Sql:string);
begin
Database.Execute(sql);
end;

客户端直接调用
cnn.appserver.ExecSql(sql);
dcom的接口是线程安全
 
好象用把 Datasetprovider里的option的allowCommandText设成true
不过这样调用的话做三层就没意思,还不如用C/S结构
 
建议使用DELPHI 5!
因为在DELPHI 4中的MIDAS为2。0版本,支持多层结构比较差的。而D5中的MIDAS已经更新为3。0
在客户端的ClientDataSet中一般不需要再调用APPSERVER接口,因为这样会增加在网络上的roundrip
有两种方法实现
一、直接使用:ClientDataSet1.CommandText := 'delete table where name='''+Edit1.Text+'''';
二、调用应用服务器的DataSetProvider来执行,将服务器中的ADOQuery.SQL设为delete table where name=:name
再利用客户端的ClientDataSet.即ClientDataSet.Params.ParamByname('name').AsString := Edit1.Text;
当然最后都有执行: ClientDataset1.Execute;
 
step1 .DataSetProvider.AllowCommandText := true;
step2. ClientDataSet.CommandText := SomeSqlSentence
step3. ClientDataSet.exeSql
 
ClientDataSet2.close;
ClientDataSet2.Provider.DataRequest('delete from tablename where mid=345');
ClientDataSet2.Execute;
 
由于没有返回结果集,所以要采用execute方法,我赞同xfma的做法
 
这里充满着正确的答案!!!!谢谢各位的努力回答!!
 
接受答案了.
 
后退
顶部