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

📄 drilltask_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit DrillTask_Unt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DataEdit_BaseUnt, DB, Grids, DBGrids, StdCtrls, Buttons,
  ExtCtrls, DBCtrls, Mask;

type
  TDrillTaskInfo=record
    Id:integer;
    Name:string;
    TaskType:string;
    //PriorTask:string;
  end;
  TDrillTask_Frm = class(TDataEdit_BaseFrm)
    Label1: TLabel;
    Label2: TLabel;
    DBEdit1: TDBEdit;
    DBComboBox1: TDBComboBox;
    BitBtn9: TBitBtn;
    BitBtn10: TBitBtn;
    BitBtn11: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BitBtn10Click(Sender: TObject);
    procedure BitBtn11Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    InsertMode:boolean;
    AddMode:boolean;
    CurrentType:string;
    PriorType:string;
    LastType:string;
    DiffTypeArray:array of string;
    CurrentBeforeTask:array of TDrillTaskInfo;
  end;

var
  DrillTask_Frm: TDrillTask_Frm;

implementation
uses Data_Unt;
{$R *.dfm}

procedure TDrillTask_Frm.BitBtn1Click(Sender: TObject);
var
LastId,i,j,TypeCount:integer;
AllTypeArray:array of string;
begin
  inherited;
  AddMode:=true;
  try
    if Base_DataS.DataSet.RecordCount>0 then
      begin
        //获取任务类型的数目及其对应的类型名称
        setlength(AllTypeArray,Base_DataS.DataSet.RecordCount+1);
        with Base_DataS.DataSet do
          begin
            i:=1;
            first;
            while not eof do
              begin
                AllTypeArray[i]:=FieldByName('Type').AsString;
                next;
                i:=i+1;
              end;
          end;
        TypeCount:=1;
        for i:=1 to High(AllTypeArray)-1 do
          begin
            if AllTypeArray[i]<>AllTypeArray[i+1] then
              TypeCount:=TypeCount+1;
          end;
        setlength(DiffTypeArray,TypeCount+1);
        DiffTypeArray[1]:=AllTypeArray[1];
        j:=1;
        for i:=2 to High(AllTypeArray) do
          begin
            if DiffTypeArray[j]<>AllTypeArray[i] then
              begin
                DiffTypeArray[j+1]:=AllTypeArray[i];
                j:=j+1;
              end;
          end;

        { //获取所有记录的信息
        setlength(CurrentBeforeTask,Base_DataS.DataSet.RecordCount+1);
        with Base_DataS.DataSet do
          begin
            i:=1;
            first;
            while not eof do
              begin
                CurrentBeforeTask[i].Id:=FieldByName('Id').AsInteger;
                CurrentBeforeTask[i].Name:=FieldByName('Name').AsString;
                CurrentBeforeTask[i].TaskType:=FieldByName('Type').AsString;
                next;
                i:=i+1;
              end;
          end;
        //将获取的记录的名称显示在DBComboBox1的列表中
        DBComboBox2.Items.Clear;
        for i:=1 to High(CurrentBeforeTask) do
          begin
            DBComboBox2.Items.Add(CurrentBeforeTask[i].Name);
          end;  }
      end;//end:if Base_DataS.DataSet.RecordCount>0 then
    Base_DataS.DataSet.Last;
    LastId:=GetLastRecId(Base_DataS.DataSet,'Id');
    LastType:=Base_DataS.DataSet.FieldByName('Type').AsString;
    Base_DataS.DataSet.Append;
    Base_DataS.DataSet.FieldByName('Id').Value:=LastId+1;
  except
    showmessage('数据库未连接正确!');
  end;
end;

procedure TDrillTask_Frm.BitBtn3Click(Sender: TObject);
var
i:integer;
begin
  if DBEdit1.Text='' then
    begin
      showmessage('请确定任务名称!');
      BitBtn3.Enabled:=true;
      DBEdit1.SetFocus;
      exit;
    end;
  if DBComboBox1.Text='' then
    begin
      showmessage('请选择任务类型!');
      BitBtn3.Enabled:=true;
      DBComboBox1.SetFocus;
      exit;
    end;
  if InsertMode then
    begin
      if (DBComboBox1.Text<>CurrentType)and(DBComboBox1.Text<>PriorType) then
        begin
          if (CurrentType<>'')and(PriorType<>'') then
            begin
               if CurrentType=PriorType
                 then
                   showmessage('此处只允许插入‘'+CurrentType+'’类型的掘进任务!')
                 else
                   showmessage('此处只允许插入‘'+CurrentType+'‘或’'+PriorType+'’类型的掘进任务!');
            end;
          if(CurrentType<>'')and(PriorType='') then
            showmessage('此处只允许插入‘'+CurrentType+'’类型的掘进任务!');
          DBComboBox1.SetFocus;
          BitBtn3.Enabled:=true;
          exit;
        end;
    end;
  if AddMode then
    begin
      if DBComboBox1.Text<>LastType then
        begin
          for i:=1 to High(DiffTypeArray) do
            begin
              if DiffTypeArray[i]=DBComboBox1.Text then
                begin
                  showmessage('不允许重复添加‘'+DiffTypeArray[i]+'’类型的掘进任务,请在上面的相应类型上插入掘进任务!');
                  DBComboBox1.SetFocus;
                  if not BitBtn3.Enabled then BitBtn3.Enabled:=true;
                  exit;
                end;
            end;
        end;
    end;
  inherited;
  if InsertMode then InsertMode:=false;
  if AddMode then AddMode:=false;
  if not BitBtn10.Enabled then BitBtn10.Enabled:=true;
  if not BitBtn11.Enabled then BitBtn11.Enabled:=true;
end;

procedure TDrillTask_Frm.BitBtn2Click(Sender: TObject);
var
LastRecNo,CurrentRecNo,m,i:integer;
BK:TBookMark;
Sequence:array of integer;
begin
  CurrentRecNo:=Base_DataS.DataSet.RecNo;
  BK:=Base_DataS.DataSet.GetBookmark;
  Base_DataS.DataSet.Last;
  LastRecNo:=Base_DataS.DataSet.RecNo;
  Base_DataS.DataSet.GotoBookmark(BK);
  m:=LastRecNo-CurrentRecNo+1;
  if m>1 then //如果被删除的记录不是最后一条记录,则记录当前记录及其之后的序号信息
    begin
      SetLength(Sequence,m+1);
      i:=1;
      while not Base_DataS.DataSet.Eof do
        begin
          with Base_DataS.DataSet do
            begin
              Sequence[i]:=FieldByName('Id').AsInteger;
              next;
              i:=i+1;
            end;
        end;
    end;
  Base_DataS.DataSet.GotoBookmark(BK);
  Base_DataS.DataSet.FreeBookmark(BK);
  inherited;//删除
  BK:=Base_DataS.DataSet.GetBookmark;
  if CurrentRecNo=1 then  //删除的记录是第一条记录,删除后指针指向第二条记录
    begin
      i:=2;
      With Base_DataS.DataSet do
        begin
          while not eof do
            begin
              edit;
              FieldByName('Id').AsInteger:=Sequence[i]-1;
              Post;
              next;
              i:=i+1;
            end;
        end;
    end;
  if m=1 then //删除的记录是最后一条记录,无需修改
    begin
    end;
  if (CurrentRecNo<>1)and(m>1)then //删除的记录既不是第一条记录,也不是最后一条记录,删除后指针指向被删除记录的前一条记录
    begin
      Base_DataS.DataSet.Next;//指向被删除记录的下一条记录
      i:=2;
      With Base_DataS.DataSet do
        begin
          while not eof do
            begin
              edit;
              FieldByName('Id').AsInteger:=Sequence[i]-1;
              post;
              next;
              i:=i+1;
            end;
        end;
    end;
  Base_DataS.DataSet.GotoBookmark(BK);
  Base_DataS.DataSet.FreeBookmark(BK);
end;

procedure TDrillTask_Frm.BitBtn9Click(Sender: TObject);
var
BehindSequence:array of integer;
i,j:integer;
CurrentRecNo,LastRecNo,InsertRecNo,m:integer;
BK:TBookMark;
begin
  //AddMode:=false;

⌨️ 快捷键说明

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