本人通过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;
不知道这样子用本来就是错的,还是另有原因,还请各位帮帮忙
当我更新两条记录时。出现“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;
不知道这样子用本来就是错的,还是另有原因,还请各位帮帮忙
//是因为ProduceCost:TQuery类,并绑定了ProProcuceCost:TDataSetProvider
//这个不能在用于ProduceCost.ExecSql。而要用外创建一个TQuery来执行就OK啦~~