在三层构架中用TClientDataSet来更新数据库时,怎么就只能更新一条记录吗?

riccdw421 2007-08-07 03:16:32
本人通过TClientDataSet来更新数据库时,怎么就只能更新一条记录
当我更新两条记录时。出现“Cannot Perform this operation on a closed dataset”
客户端我是采用DCOM来联接RemoteDataModule
客户端代码如下:
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet1.Append; //添加记录
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

ClientDataSet1.Delete ;//删除记录

end;


procedure TForm1.Button4Click(Sender: TObject);
//提交数据更新
begin
ClientDataSet1.CheckBrowseMode();
ClientDataSet1.ApplyUpdates(-1);
end;
服务端处理:
procedure TGP40CommData.ProProduceCostBeforeUpdateRecord(Sender: TObject;
SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
UpdateKind: TUpdateKind; var Applied: Boolean);
var str1:string;
begin


//----分为插入、删除、更新改变记录---
if UpdateKind = ukInsert then
begin
str1:='insert into ProduceCost (ProdID,StapID,StapAmount) values(';
str1:=str1+''''+DeltaDS.FieldByName('ProdID').Text+''',';
str1:=str1+''''+DeltaDS.FieldByName('StapID').Text+''',';
str1:=str1+''''+DeltaDS.FieldByName('StapAmount').Text+''')';
end;
if UpdateKind=ukDelete then
begin
str1:='delete from ProduceCost where pcid='''+SourceDS.FieldByName('PCID').Text+''' ';
end;
if UpdateKind=ukModify then
begin
str1:='update ProduceCost set stapAmount=';
str1:=str1+DeltaDS.FieldByName('stapamount').Text;
str1:=str1+' where pcid = '''+SourceDS.FieldByName('pcid').Text+''' ';
end;
//ProduceCost.Close; //这句要不要都出现问题
ProduceCost.SQL.Clear();
ProduceCost.SQL.Add(str1);
ProduceCost.ExecSQL;
Applied:=true;
end;
不知道这样子用本来就是错的,还是另有原因,还请各位帮帮忙。。。。。。
...全文
140 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
riccdw421 2007-08-08
  • 打赏
  • 举报
回复
//没人关心,问题已解决。
//是因为ProduceCost:TQuery类,并绑定了ProProcuceCost:TDataSetProvider
//这个不能在用于ProduceCost.ExecSql。而要用外创建一个TQuery来执行就OK啦~~

684

社区成员

发帖
与我相关
我的任务
社区描述
智能路由器通常具有独立的操作系统,包括OpenWRT、eCos、VxWorks等,可以由用户自行安装各种应用,实现网络和设备的智能化管理。
linuxpython 技术论坛(原bbs)
社区管理员
  • 智能路由器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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