⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drillworkpriortask_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:
     //记录插入的回采面的开始时间和结束时间
     Base_DataS.DataSet.Post; //更新插入的记录

//记录指针返回到开始插入时的位置,对插入数据后的表进行修正,主要是修正“Sequence”、“Relay_Route”、“Relay_Id”、“Begin_Time”和“End_Time”字段
     Base_DataS.DataSet.GotoBookmark(Mark);

  //------------------test------------------------
    //r:=Base_DataS.DataSet.FieldByName('DrillTask_Id').AsInteger;
    //showmessage('当前记录的掘进任务编号为: '+inttostr(r));

  //---------------------test------------------
     with Base_DataS.DataSet do
       begin
         if InsertTask_Id=Current.DrillTask_Id then
           begin
             m1:=Current.DrillTask_Id;
             for i:=1 to High(CurrentBehind) do
               begin
                 if (CurrentBehind[i].DrillTask_Id=m1)then
                     begin
                       Edit;
                       FieldByName('Sequence').AsInteger:=CurrentBehind[i].Sequence+1;
                       FieldByName('Id').AsInteger:=CurrentBehind[i].Id+1;
                       Post;
                     end
                   else
                     begin
                       Edit;
                       FieldByName('Sequence').AsInteger:=CurrentBehind[i].Sequence+1;
                       Post;
                     end;
                 next;
               end;
           end;
         if (InsertTask_Id<>Current.DrillTask_Id)and(Current.Id=1) then
           begin
             if InsertTask_Id=CurrentPrior.DrillTask_Id then //插入的是上一个掘进任务的最后一个前工序
               begin
                 for i:=1 to High(CurrentBehind) do
                   begin
                     Edit;
                     FieldByName('Sequence').AsInteger:=CurrentBehind[i].Sequence+1;
                     Post;
                     next;
                   end;
               end;
             if InsertTask_Id<>CurrentPrior.DrillTask_Id then
               begin
                 if Inf=mryes then //插入的记录是原当前记录(插入之前,指针指向的记录)所在的掘进任务的第一个前工序,插入的是一个新掘进任务的第一个前工序
                   begin
                     for i:=1 to High(CurrentBehind) do
                       begin
                         Edit;
                         FieldByName('Sequence').AsInteger:=CurrentBehind[i].Sequence+1;
                         Post;
                         next;
                       end;
                   end;
               end;
           end;
       end;
     //把插入并更新后的接替表关闭后再打开,以显现出插入后的效果
     Base_DataS.DataSet.Close;
     Base_DataS.DataSet.Open;
     Base_DataS.DataSet.GotoBookmark(Mark);
     Base_DataS.DataSet.FreeBookmark(Mark);
   except
     Base_DataS.DataSet.Cancel; //取消表的插入状态
     showmessage('插入操作更新没有成功!');
   end;
   //插入并更新成功后进行善后处理
   InsertMode:=false;//更新成功或者更新没有成功都取消界面的插入状态

   DBGrid1.ReadOnly:=true;
   DBGrid1.Enabled:=true;
   BitBtn1.Enabled:=true;
   BitBtn2.Enabled:=true;
   BitBtn4.Enabled:=true;
   BitBtn5.Enabled:=true;
   BitBtn6.Enabled:=true;
   BitBtn7.Enabled:=true;
   BitBtn8.Enabled:=true;
   BitBtn9.Enabled:=true;
   DBLookUpComboBox1.Enabled:=false;
   DBLookUpComboBox2.Enabled:=false;
   BitBtn1.SetFocus;
end;

procedure TDrillWorkPriorTask_Frm.BitBtn9Click(Sender: TObject);
var
CurrentRecNo,LastRecNo,i,m:integer;
begin
//在当前记录的前面插入一条新记录,

  InsertMode:=true;
  if Base_DataS.DataSet.RecordCount=0 then
    begin
      showmessage('不能在空表中插入!');
      exit;
    end;
  BitBtn3.Enabled:=true;

  BitBtn1.Enabled:=false;
  BitBtn2.Enabled:=false;
  BitBtn4.Enabled:=false;
  BitBtn5.Enabled:=false;
  BitBtn6.Enabled:=false;
  BitBtn7.Enabled:=false;
  BitBtn8.Enabled:=false;
  BitBtn9.Enabled:=false;

  DBGrid1.ReadOnly:=false;
  DBGrid1.Enabled:=false;

  //读取当前记录的信息
  with Base_DataS.DataSet do
    begin
      Current.Sequence:=FieldByName('Sequence').AsInteger;
      Current.DrillTask_Id:=FieldByName('DrillTask_Id').AsInteger;
      Current.Id:=FieldByName('Id').AsInteger;
      Current.PriorTask_Name:=FieldByName('PriorTask_Name').AsString;
      Current.PriorTask_Id:=FieldByName('PriorTask_Id').AsInteger;
    end;
  if Current.Sequence=1 then
    begin
     showmessage('不能在第一条记录前插入记录,请重新选择插入位置!');

     Base_DataS.DataSet.Cancel; //取消插入操作
     InsertMode:=false;

     BitBtn3.Enabled:=false;
     BitBtn1.Enabled:=true;
     BitBtn2.Enabled:=true;
     BitBtn4.Enabled:=true;
     BitBtn5.Enabled:=true;
     BitBtn6.Enabled:=true;
     BitBtn7.Enabled:=true;
     BitBtn8.Enabled:=true;
     BitBtn9.Enabled:=true;
     DBLookUpComboBox1.Enabled:=false;
     DBLookUpComboBox2.Enabled:=false;
     exit;
    end;

  //读取当前记录的前面一条信息
  Base_DataS.DataSet.Prior;
  with Base_DataS.DataSet do
    begin
      CurrentPrior.Sequence:=FieldByName('Sequence').AsInteger;
      CurrentPrior.DrillTask_Id:=FieldByName('DrillTask_Id').AsInteger;
      CurrentPrior.Id:=FieldByName('Id').AsInteger;
      CurrentPrior.PriorTask_Name:=FieldByName('PriorTask_Name').AsString;
      CurrentPrior.PriorTask_Id:=FieldByName('PriorTask_Id').AsInteger;
    end;
  Base_DataS.DataSet.Next;  //返回原位置
  //确定当前记录及其以后的记录数目
  CurrentRecNo:=Base_DataS.DataSet.RecNo;
  Mark:=Base_DataS.DataSet.GetBookmark;
  Base_DataS.DataSet.Last;
  LastRecNo:=Base_DataS.DataSet.RecNo;
  m:=LastRecNo-CurrentRecNo+1;
  Setlength(CurrentBehind,m+1);
  //读取当前记录及其以后的所有记录信息
  Base_DataS.DataSet.GotoBookmark(Mark); //返回原位置
  i:=1;
  if Base_DataS.DataSet.Eof then
    begin
      with Base_DataS.DataSet do
        begin
          CurrentBehind[i].Sequence:=FieldByName('Sequence').AsInteger;
          CurrentBehind[i].DrillTask_Id:=FieldByName('DrillTask_Id').AsInteger;
          CurrentBehind[i].Id:=FieldByName('Id').AsInteger;
          CurrentBehind[i].PriorTask_Name:=FieldByName('PriorTask_Name').AsString;
          CurrentBehind[i].PriorTask_Id:=FieldByName('PriorTask_Id').AsInteger;
        end;
    end;
  while not Base_DataS.DataSet.Eof do
    begin
      with Base_DataS.DataSet do
        begin
          CurrentBehind[i].Sequence:=FieldByName('Sequence').AsInteger;
          CurrentBehind[i].DrillTask_Id:=FieldByName('DrillTask_Id').AsInteger;
          CurrentBehind[i].Id:=FieldByName('Id').AsInteger;
          CurrentBehind[i].PriorTask_Name:=FieldByName('PriorTask_Name').AsString;
          CurrentBehind[i].PriorTask_Id:=FieldByName('PriorTask_Id').AsInteger;
          next;
          i:=i+1;
        end;
    end;

  //读取表中的所有信息存入数组PriorTask中,以便在需要的时候进行数据比较和检查等处理
  with Base_DataS.DataSet do
    begin
      setlength(PriorTask,RecordCount+1);
      first;
      i:=1;
      while not eof do
        begin
          PriorTask[i].Sequence:=FieldByName('Sequence').AsInteger;
          PriorTask[i].DrillTask_Id:=FieldByName('DrillTask_Id').AsInteger;
          PriorTask[i].Id:=FieldByName('Id').AsInteger;
          PriorTask[i].PriorTask_Name:=FieldByName('PriorTask_Name').AsString;
          PriorTask[i].PriorTask_Id:=FieldByName('PriorTask_Id').AsInteger;
          next;
          i:=i+1;
        end;
    end;

  Base_DataS.DataSet.GotoBookmark(Mark);
  //暂时修改当前和以后的记录的Sequence字段值为从-1开始的负值,在插入的记录更新后,再指定相应的值
  //以便新插入的记录的Sequence字段可以指定为当前记录的该字段的值
  i:=-1;
  while not Base_DataS.DataSet.Eof do
    begin
      Base_DataS.DataSet.Edit;
      Base_DataS.DataSet.FieldByName('Sequence').AsInteger:=i;
      Base_DataS.DataSet.Post; //更新后表的指针仍然指向当前记录,但是,当关闭再打开该表后,该当前记录的Sequence字段值若仍然为-1,则指针指向的记录将发生变化
      Base_DataS.DataSet.Next;
      i:=i-1;
    end;

  Base_DataS.DataSet.GotoBookmark(Mark);
  Base_DataS.DataSet.Insert;

  DBLookUpComboBox1.Enabled:=true;
  DBLookUpComboBox2.Enabled:=true;

  DBLookUpComboBox1.SetFocus;
end;

procedure TDrillWorkPriorTask_Frm.FormCreate(Sender: TObject);
begin
  inherited;
  InsertMode:=false;
  Modify:=false;
  with DrillWorkTask_AdoQ do
    begin
      close;
      sql.Clear;
      sql.Add('select * from 掘进工作任务f');
      sql.Add('order by Id asc');
      ExecSQL;
      open;
    end;
  DBLookUpComboBox1.ListSource:=DrillWorkTask_DataS;
  DBLookUpComboBox1.ListField:='Name';
  DBLookUpComboBox1.KeyField:='Id';
end;

procedure TDrillWorkPriorTask_Frm.DBLookupComboBox1Click(Sender: TObject);
var
str1:string;
Id:integer;
begin
  //列出DBLookupComboBox1对应的掘进工作任务可能的前工序

  //判断掘进工作任务在“掘进工作任务”表中的Id号
  str1:=DBLookUpComboBox1.Text;
  if str1='' then exit; //若str1不为空,则已经在Base_DataS的数据集中定位了str1对应的记录
  Id:=DrillWorkTask_DataS.DataSet.FieldByName('Id').AsInteger;
  with SelectPriorTask_AdoQ do
    begin
      close;
      sql.Clear;
      sql.Add('select * from 掘进工作任务f');
      sql.Add('where (Id<:v1)');
      sql.Add('order by Id asc');
      Parameters.ParamByName('v1').Value:=Id;
      //Parameters.ParamByName('v2').Value:=Id;
      ExecSQL;
      open;
    end;
  DBLookUpComboBox2.ListSource:=SelectPriorTask_DataS;
  DBLookUpComboBox2.ListField:='Name';
  DBLookUpComboBox2.KeyField:='Id';
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -