ClientDataset2:Cannot perform this operation on a closed dataset.

chenlin19880325 2010-08-24 11:25:06
在客户端做了主从表,点击从表新增的时候总是报出ClientDataset2:Cannot perform this operation on a closed dataset.(求解)主要代码如下:
unit Input;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBClient, Grids, DBGrids;

type
TFInput = class(TForm)
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
DataSource1: TDataSource;
ClientDataSet2: TClientDataSet;
DataSource2: TDataSource;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
ClientDataSet1: TClientDataSet;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure ClientDataSet2AfterInsert(DataSet: TDataSet);
procedure ClientDataSet1AfterScroll(DataSet: TDataSet);
procedure ClientDataSet2NewRecord(DataSet: TDataSet);
procedure ClientDataSet2AfterScroll(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FInput: TFInput;

implementation
uses
erp_DataModule;

{$R *.dfm}

procedure TFInput.Button1Click(Sender: TObject); //获取数据
var
ASQL:string;
begin
ClientDataset1.Close;;
ASQL:='select *from sgRemInmain';
//获取数据
ClientDataset1.Data:=TSGDataBase.GetData(ASQL);
ClientDataset1.Open;
//ClientDataset2.Data:=TSGDataBase.GetData('select *from sgRemIndetail') ;
end;

procedure TFInput.Button2Click(Sender: TObject); //新增
begin
ClientDataset1.Append;
end;

procedure TFInput.Button3Click(Sender: TObject); //删除
begin
if MessageDlg('确实要删除当前记录吗?',mtInformation,[mbOK,mbCancel],0)=mrOK then
clientdataset1.Delete;
TSGDataBase.ApplyUpdate('select * from sgRemInmain where 1=0','sgRemInmain',clientdataset1);
end;

procedure TFInput.Button4Click(Sender: TObject); //保存
begin
if ClientDataset1.State in [dsEdit,dsInsert] then
ClientDataset1.Post;
TSGDataBase.ApplyUpdate('select * from sgRemInmain where 1=0','sgRemInmain',clientdataset1);
end;

procedure TFInput.Button5Click(Sender: TObject); //新增(从表)
begin
ClientDataset2.Append;
end;

procedure TFInput.Button6Click(Sender: TObject); //删除(从表)
begin
if MessageDlg('确实要删除当前记录吗?',mtInformation,[mbOK,mbCancel],0)=mrOK then
clientdataset2.Delete;
TSGDataBase.ApplyUpdate('select * from sgRemIndetail where 1=0','sgRemIndetail',clientdataset2);
end;

procedure TFInput.Button7Click(Sender: TObject);
begin
if ClientDataset2.State in [dsEdit,dsInsert] then
ClientDataset2.Post;
TSGDataBase.ApplyUpdate('select * from sgRemIndetail where 1=0','sgRemIndetail',clientdataset2);
end;

procedure TFInput.Button8Click(Sender: TObject);
begin
Close;
end;

procedure TFInput.ClientDataSet2AfterInsert(DataSet: TDataSet);
begin
// ClientDataset2.FieldByName('uniqueid').Value:=ClientDataset1.FieldByName('uniqueid').Value;
end;

procedure TFInput.ClientDataSet1AfterScroll(DataSet: TDataSet);
begin
// ClientDataset2.Close;
// ClientDataSet2.Params[0].Value:=DataSet.FieldByName('uniqueid').Value;
// ClientDataset2.Open;
end;


procedure TFInput.ClientDataSet2NewRecord(DataSet: TDataSet);
begin
//ClientDataset2.FieldByName('uniqueid').Value:=ClientDataset1.FieldByName('uniqueid').Value;
end;

procedure TFInput.ClientDataSet2AfterScroll(DataSet: TDataSet);
begin
ClientDataset2.FieldByName('uniqueid').Value:=ClientDataset1.FieldByName('uniqueid').Value;
{ if ClientDataset2.Active then
begin
ClientDataset2.Close;
ClientDataset2.Open;
end;}
end;

end.
...全文
723 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
varick_zhong 2010-08-24
  • 打赏
  • 举报
回复
//获取数据
应该在界面初始化时先执行这个 获取数据 的操作,这样新增时就不会出错了
酣酣 2010-08-24
  • 打赏
  • 举报
回复
从表没有打开
Active属性是False
得先打开下!
chenlin19880325 2010-08-24
  • 打赏
  • 举报
回复
我是新手,也在摸索中。主从表搞了很久没搞出来,心里感觉不舒服。能不能指点下
kye_jufei 2010-08-24
  • 打赏
  • 举报
回复
Cannot perform this operation on a closed dataset...
不能履行这一操作对一个封闭的数据...
LZ的這種寫法有問題。。。認真檢查一下程序代碼,如:
ClientDataset1.Close;
chenlin19880325 2010-08-24
  • 打赏
  • 举报
回复
楼上两种方法都试过了,3楼:打开Active是报错(adpExecute:CommandText:CommandText does not return a result set.);4楼的方法在我程序中不行。不过还是谢谢两位

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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