操作代码如下:
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不能执行修改操作。 |