起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 146|回复: 7

【结帖】[请求]DataSetZYJHDDB: Cannot perform this operation on a closed datase

[复制链接]
发表于 2008-4-10 16:44:12 | 显示全部楼层 |阅读模式
DataSetZYJHDDB: Cannot perform this operation on a closed dataset
是什么原因?
回复

使用道具 举报

 楼主| 发表于 2008-4-10 16:48:40 | 显示全部楼层
代码:
unit SJWGZYJHDDB;

interface

uses
  Business.System, Business.Model, Business.Forms, Business.Data;
type
  TSJWGZYJHDDB = class(TFormDoc)
    InfoBroker: TInfoBroker;
    DataSetBrokerZYJHDDB: TDataSetBroker;
    DataGrid: TDataGrid;
    procedure actFixAllExecute(Sender: TObject);

  private
    {private declarations}

  public
    {public declarations}
    v_jhpc:string;
    v_substring:string;
    procedure autofillitem;
  end;

implementation
procedure TSJWGZYJHDDB.autofillitem;
var
li:integer;
begin
     li:=Forms.Application.MessageBox('Text5-0','Caption',0);
     //调用DisableControls方法让数据感知控件不作变化,
     //只有当执行EnableControls之后才体现数据集的变化

     DataSetBrokerZYJHDDB.DataSet.DisableControls;
     try
        li:=Forms.Application.MessageBox('Text5-1','Caption',0);
        //定位到数据集的第一条记录
        DataSetBrokerZYJHDDB.DataSet.First;
        DataSetBrokerZYJHDDB.DataSet.First;
        //判断是否到达最后一行
        li:=Forms.Application.MessageBox('Text5-2','Caption',0);
        while not DataSetBrokerZYJHDDB.DataSet.Eof do
        begin
         //数据集编辑状态
         DataSetBrokerZYJHDDB.DataSet.Edit;
         //给当前行的 bz 列赋值
         //DataSetBrokerZYJHDDB.DataSet.FieldByName('BZ').AsString :=v_jhpc;
         DataSetBrokerZYJHDDB.DataSet.FieldByName('JHPC').AsInteger:=Sysutils.StrToInt(v_jhpc);
         //提交修改或者新增的记录,修改数据集状态为dsBrowse
         DataSetBrokerZYJHDDB.DataSet.Post;
         //移动到下一条记录
         DataSetBrokerZYJHDDB.DataSet.Next;
        end;
        li:=Forms.Application.MessageBox('Text5-3','Caption',0);
        //把本地数据集的修改提交给应用服务端
        //DataSetBrokerZYJHDDB.DataSet.ApplyUpdates;
     finally
     //建立数据感知控件与数据集的关联
     li:=Forms.Application.MessageBox('Text5-4','Caption',0);
     DataSetBrokerZYJHDDB.DataSet.EnableControls;

     end;

end;
procedure TSJWGZYJHDDB.actFixAllExecute(Sender: TObject);
var
li:integer;
begin
     DataGrid.ApplyBestFit(nil);
     v_jhpc:=Sysutils.FormatDateTime('mmdd',Business.System.SysUtils.Now)+
     Sysutils.FormatDateTime('hhnnss',Business.System.SysUtils.Time);
     v_substring:=v_jhpc.Substring(0,2);
     if  Sysutils.StrToInt(v_substring)<10 then
       v_jhpc:='1'+v_jhpc.Substring(1)
     else
     v_jhpc:='2'+v_jhpc.Substring(1);
     li:=Forms.Application.MessageBox('Text5','Caption',0);
     autofillitem;
     li:=Forms.Application.MessageBox('Text6','Caption',0);
     DataSetBrokerZYJHDDB.DataSet.First;
     li:=Forms.Application.MessageBox('Text7','Caption',0);
     DataSetBrokerZYJHDDB.DataSet.FieldByName('JHXH').FocusControl;

end;

end.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-10 16:50:18 | 显示全部楼层
执行到
li:=Forms.Application.MessageBox('Text5-1','Caption',0);
        //定位到数据集的第一条记录
        DataSetBrokerZYJHDDB.DataSet.First;
这一句的时候出现的。上午还很正常!
回复 支持 反对

使用道具 举报

发表于 2008-4-10 16:52:12 | 显示全部楼层
DataSetBrokerZYJHDDB.DataSet数据集没打开吧
回复 支持 反对

使用道具 举报

发表于 2008-4-10 16:53:46 | 显示全部楼层
你在这里加上
if not DataSetBrokerZYJHDDB.DataSet.active = true then
  DataSetBrokerZYJHDDB.DataSet.active := True
再看看吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-10 16:54:40 | 显示全部楼层
解决。
数据集不是默认打开的吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-10 16:58:09 | 显示全部楼层
加了DataSetBrokerZYJHDDB.DataSet.Open; 这个也可以:)

总之解决了!谢谢:)
回复 支持 反对

使用道具 举报

发表于 2008-4-10 17:30:04 | 显示全部楼层
嗯,可能你取消了文档中的默认打开!
结了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 23:03 , Processed in 0.040515 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表