📄 drilltask_unt.pas
字号:
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 + -