起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 167|回复: 5

数据集DataSetSJJ_YDJHBZB不能执行修改操作[请求]**

[复制链接]
发表于 2008-8-26 11:37:20 | 显示全部楼层 |阅读模式
操作代码如下:

procedure TCT_JHZZTZJH.ToolButton4Click(Sender: TObject);
var
   listCount,i:Integer;
   update_LY_list : TStringList; // 合并来源计划编号
   update_list:TStringList;      // 需要更新来源计划的操作语句
   del_list : TStringList; // 取消合并的计划编号
   SelDataSetBroker:TDataSetBroker;
   str_Filter:string;
   selcount:integer;      //被选择记录数

begin
  // 检查时间
     if not CheckDateTime then
        exit;
     selcount:=0;
     if self.DataSetBroker1.DataSet.State = TDataSetState.dsInactive then
     begin
          Business.Forms.Dialogs.ShowMessage('数据集合没有打开');
          exit;
     end;

     if not ZYJ_YDSCJHZYJ.TZYJ_YDSCJHZYJ.IsSelectRecord(self.DataSetBroker1.DataSet) then
     begin
          JsDialogs.ShowMsg('请勾选要删除的记录','提示');
          exit;
     end;

     {self.DataSetBroker1.DataSet.First;
     for i:= 0 to DataSetBroker1.DataSet.RecordCount-1 do
     begin
       if self.DataSetBroker1.DataSet.FieldByName('xzk').AsString='True' then
          selcount:=selcount+1;
          self.DataSetBroker1.DataSet.Next;
     end;

     if selcount=0 then
     begin
          Business.Forms.Dialogs.ShowMessage('没选择记录');
          exit;
     end; }

     // 取消合并
     if self.DataSetBroker1.DataSet.RecordCount  = 0 then
     begin
          Business.Forms.Dialogs.ShowMessage('没有数据可以操作');
          exit;
     end;

     if Business.Forms.jsDialogs.ConfirmBox('确认对所有已选择记录进行取消合并操作吗?','确认',2)  then
     begin
          // 开始取消合并
          update_LY_list := TStringList.Create;
          update_list := TStringList.Create;
          del_list := TStringList.Create;


          self.DataSetBroker1.DataSet.DisableControls;

          self.DataSetBroker1.DataSet.First;
           while not self.DataSetBroker1.DataSet.Eof do
           begin
             if self.DataSetBroker1.DataSet.FieldByName('xzk').AsString='True' then
             begin
                  // 记录被选中
                  // 检查是否合并
                  str_Filter:='HBHJHGUID='''+self.DataSetBroker1.DataSet.FieldByName('JHGUID').AsString+'''';
                  self.DataSetBroker8.DataSet.Close;
                  TBizDataset(self.DataSetBroker8.DataSet).SQLFiltered:=false;
                  TBizDataset(self.DataSetBroker8.DataSet).SQLFilter:=str_Filter;
                  TBizDataset(self.DataSetBroker8.DataSet).SQLFiltered:=true;
                  self.DataSetBroker8.DataSet.Open;
                  if self.DataSetBroker8.DataSet.RecordCount = 0 then
                  begin
                       Business.Forms.Dialogs.ShowMessage('选择的计划不属于合并计划,不能进行取消合并操作,操作被终止!!');
                       //self.DataSetBroker3.DataSet.CancelUpdates;
                      // self.DataSetBroker1.DataSet.CancelUpdates;
                       update_LY_list.Free;
                       update_list.Free;
                       del_list.Free;
                       self.DataSetBroker1.DataSet.EnableControls;
                       SYSUTILS.Abort;
                  end;

                  // 对属于合并的记录进行操作,清除本记录,清除合并关系,清除流转表关系,恢复来源表状态
                  // 记录合并来源
                  self.DataSetBroker8.DataSet.First;
                  while not self.DataSetBroker8.DataSet.Eof do
                  begin
                       update_LY_list.Add(self.DataSetBroker8.DataSet.FieldByName('HBQLYGUID').AsString);
                       //self.DataSetBroker3.DataSet.Delete; // 这里不用删除,会跟着主记录一起删除
                       self.DataSetBroker8.DataSet.Next;
                  end;
                  // 登记本次取消合并的计划编号
                  del_list.Add(self.DataSetBroker1.DataSet.FieldByName('JHGUID').AsString);
                  self.DataSetBroker1.DataSet.Delete; // 主记录删除后,变电间隔、班组信息、计划类型和合并关系会自动删除
                  continue;
             end;
             self.DataSetBroker1.DataSet.Next;

           end;
           self.DataSetBroker1.DataSet.ApplyUpdates;

           // 清除流转关系表中的记录
           listCount := del_list.Count;
           for i:=0 to listCount-1 do
           begin
               update_list.Add(' delete from  SCJH_YDJHLZGXB  where GXJHBH='''+del_list.Strings+''' ');
           end;

           if update_list.Count > 0 then
           begin
                ZYJ_SJJCZHS.TZYJ_SJJCZHS.executeSqlList(update_list);
           end;

           // 处理来源表计划的合并标志
           update_list.Clear;
           listCount := update_LY_list.Count;
           for i:=0 to listCount-1 do
           begin
               update_list.Add(' update SCJH_YDJHBZB set SFHBBZ=''0'' where JHGUID='''+update_LY_list.Strings+''' ');

           end;

           if update_list.Count > 0 then
           begin
                ZYJ_SJJCZHS.TZYJ_SJJCZHS.executeSqlList(update_list);
           end;

           update_LY_list.Free;
           update_list.Free;
           del_list.Free;

           if self.DataSetBroker1.DataSet.ChangeCount > 0 then
              self.DataSetBroker1.DataSet.CancelUpdates;


           self.DataSetBroker1.DataSet.EnableControls;
           self.DataSetBroker1.DataSet.Refresh;
           is_change_data := false;
     end
     else
     begin
          self.DataSetBroker1.DataSet.CancelUpdates;
     end;
end;



代码执行完后在编辑数据就提示:数据集DataSetSJJ_YDJHBZB不能执行修改操作。
回复

使用道具 举报

发表于 2008-8-26 11:46:07 | 显示全部楼层
你的整个代码没有涉及到 DataSetSJJ_YDJHBZB  这个数据集,不执行这段代码 DataSetSJJ_YDJHBZB  这个数据集在编辑数据的时候正常吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-26 11:54:16 | 显示全部楼层
self.DataSetBroker1是数据集DataSetSJJ_YDJHBZB的代理
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-26 12:00:08 | 显示全部楼层
调试发现代码self.DataSetBroker1.DataSet.EnableControls是执行过了,但datagrid未能感知数据集。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-26 12:56:43 | 显示全部楼层
datagrid使用了自动折行,不知道是否有关系
回复 支持 反对

使用道具 举报

发表于 2008-8-26 13:57:27 | 显示全部楼层
楼主,您把1楼代码的DisableControls都注释掉试试。
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 23:00 , Processed in 0.039349 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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