ClientDateSet:Cannot perform this operation on a closed dataset

     一、问题表现

    Delphi 三层DataSnap,使用AlphaControls控件优化界面,一窗口编辑时,出现下列错误提示:       

     编译通过,该窗口中,重新显示数据,下图:

    

    相关代码:

    

procedure TShowOld_1_Frm.Button7Click(Sender: TObject);
var SQL,ID:string;
    k,L:integer;
begin
  GroupBox4.Caption:=Button7.Caption;
  DateTimetoString(ID,'yyyy-MM-dd',now-100);
  SQL:='select * from 老人基本信息 where (分支='+#39+sFCID+#39+') ';
  SQL:=SQL+'and (入院日期>='+#39+ID+#39+') order by 入院日期';
  DataModule1.ClientDataSet1.Active:=False;
  DataModule1.ClientDataSet1.DataRequest(SQL);
  DataModule1.ClientDataSet1.Active:=True;
  ClientDataSet1.Data:=DataModule1.ClientDataSet1.Data;
  DataModule1.ClientDataSet1.Active:=False;
  L:=ClientDataSet1.RecordCount;
  SetSource(DataSource1);
  DBGridEh1.Columns[0].Title.Alignment := taCenter;
  DBGridEh1.Columns[0].Alignment:=taCenter;
  DBGridEh1.Columns[1].Title.Alignment := taCenter;
  DBGridEh1.Columns[1].Alignment:=taCenter;
  DBGridEh1.Columns[0].Width:=36;
  DBGridEh1.Columns[1].Width:=80;
//  sStatusbar1.Panels.Items[0].text:='    数据库:  '+IntToStr(L)+' 人信息';
end;

     问题是,首次都能正常显示(OnShow中执行代码),再次执行代码时,出现下列提示:

    二、搜索思路

    1、由提示“ ClientDataSet无法在关闭的数据集上执行此操作”,ClientDataSet上作文章。打开数据集时,每次打开换个ClientDataSet,是可以解决问题,但是,这太复杂了,也违背编程的原则。放弃此办法。

     2、在引起DBCombobox,有OnChange的控件,找原因。方法见我的别一文章:《AlphaControls控件TsDBCombobox出错:访问违规》

     3、逐个控件,进行查找,方法是屏蔽全部控件,逐个开放,检查是否出现错误。找到在 TsDBEdit控件时,使用OnChange,生成其它字段的数据,引起ClientDataSet不能进入Open状态。

      三、解决问题

      只能放弃使用OnChange事件。

      原因中使用控件AlphaControls,界面很好,但是重画窗口界面,比较复杂,要求不使用或少使用OnChange事件,引起不必要的麻烦。

      只能改变思路,加一按键实现“OnChange,生成其它字段的数据”。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ORA-14511错误是Oracle数据库中的一个常见错误,它表示在分区对象上执行操作失败。 分区对象是在Oracle数据库中对表或索引进行分区的一种技术。分区可以根据一定的规则将数据拆分为多个分区,以实现更高效的管理和查询。不过,在分区对象上执行某些操作时,可能会出现ORA-14511错误。 出现ORA-14511错误的原因可能有以下几种情况: 1. 尝试在只读分区对象上执行写操作:如果目标表或索引的分区中有只读属性,而你尝试对其进行写操作,就会出现该错误。你需要确保在可写分区上执行写操作。 2. 尝试在已挂起分区的对象上执行操作:如果目标表或索引的某个分区处于挂起状态,而你尝试对其进行操作,就会出现该错误。你需要先解除对应分区的挂起状态,然后再执行操作。 3. 分区对象处于无效状态:如果目标表或索引的某个分区处于无效状态,而你尝试对其进行操作,就会出现该错误。你需要检查并修复分区对象的无效状态。 4. 执行了不支持的操作或特性:某些操作或特性可能不适用于分区对象。例如,尝试对已启用增量分区维护的表进行一些操作就可能导致该错误。你需要确保执行的操作或特性在分区对象中是可用的。 解决ORA-14511错误的方法通常包括: 1. 确保你对可写分区对象进行写操作,避免在只读分区对象上执行写操作。 2. 解除已挂起分区的挂起状态,然后再执行操作。 3. 检查并修复分区对象的无效状态,确保其处于有效状态。 4. 避免执行不支持的操作或特性,确保操作或特性在分区对象中可用。 总结来说,ORA-14511错误表示在分区对象上执行操作失败,可能是由于只读分区对象上的写操作、挂起分区的操作、无效状态的分区对象或不支持的操作引起的。通过检查并修复相关问题,你可以解决此错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值