📄 relay_baseunt.pas
字号:
procedure TRelay_BaseFrm.BitBtn2Click(Sender: TObject);
begin
DeleteAndAdjust;
end;
procedure TRelay_BaseFrm.DBLookupComboBox2KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if key=VK_RETURN then DBLookupComboBox3.SetFocus;
end;
procedure TRelay_BaseFrm.DBLookupComboBox3KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if key=VK_RETURN then DBLookupListBox1.SetFocus;
end;
procedure TRelay_BaseFrm.ReadRelayData;
var
i,n:integer;
begin
//读取Base_DataS数据集中的数据,以便在需要的时候进行数据比较和检查等处理
try
n:=Base_DataS.DataSet.RecordCount;
SetLength(Relay,n+1);
Base_DataS.DataSet.First;
i:=1;
while not Base_DataS.DataSet.Eof do
begin
Relay[i].Sequence:=Base_DataS.DataSet.FieldByName('Sequence').AsInteger;
Relay[i].Project_Id:=Base_DataS.DataSet.FieldByName('Project_Id').AsInteger;
Relay[i].Relay_Route:=Base_DataS.DataSet.FieldByName('Relay_Route').AsInteger;
Relay[i].Relay_Id:=Base_DataS.DataSet.FieldByName('Relay_Id').AsInteger;
Relay[i].Face_Lane:=Base_DataS.DataSet.FieldByName('Face_Lane').AsInteger;
Relay[i].Area:=Base_DataS.DataSet.FieldByName('Area').AsInteger;
Relay[i].WorkGroup:=Base_DataS.DataSet.FieldByName('WorkGroup').AsInteger;
Relay[i].B_Date:=Base_DataS.DataSet.FieldByName('Begin_Date').AsDateTime;
Relay[i].E_Date:=Base_DataS.DataSet.FieldByName('End_Date').AsDateTime;
Relay[i].TaskTime:=trunc(Relay[i].E_Date-Relay[i].B_Date);
Data_Frm.Lane_AdoTab.Locate('Lane_Id',Relay[i].Face_Lane,[locaseinsensitive]);
if (not Data_Frm.Lane_AdoTab.FieldByName('WorkQuantity').IsNull)
then Relay[i].WorkQuantity:=Data_Frm.Lane_AdoTab.FieldByName('WorkQuantity').AsFloat
else Relay[i].WorkQuantity:=0;
Relay[i].Rock_Property:=Data_Frm.Lane_AdoTab.FieldByName('Rock_Property').AsString;
Relay[i].Lane_Property:=Data_Frm.Lane_AdoTab.FieldByName('Property').AsString;
Relay[i].Support_Type:=Data_Frm.Lane_AdoTab.FieldByName('Support_Type').AsString;
Base_DataS.DataSet.Next;
i:=i+1;
end;
except
end;
end;
procedure TRelay_BaseFrm.BitBtn10Click(Sender: TObject);
var
i,LastId:integer;
begin
if Base_DataS.DataSet.RecordCount>0 then ReadRelayData;
try
if Base_DataS.DataSet.RecordCount=0 then LastId:=0
else LastId:=GetLastRecId(Base_DataS.DataSet,'Sequence');
Base_DataS.DataSet.Append;
Base_DataS.DataSet.FieldByName('Sequence').Value:=LastId+1;
except
showmessage('数据库未连接正确!');
end;
BitBtn3.Enabled:=true;
DBGrid1.ReadOnly:=false;
DBGrid1.Enabled:=false;
BitBtn1.Enabled:=false;
BitBtn2.Enabled:=false;
BitBtn4.Enabled:=false;
BitBtn5.Enabled:=false;
BitBtn6.Enabled:=false;
BitBtn7.Enabled:=false;
BitBtn8.Enabled:=false;
BitBtn9.Enabled:=false;
BitBtn10.Enabled:=false;
BitBtn11.Enabled:=false;
BitBtn12.Enabled:=false;
for i:=1 to Panel2.ControlCount do
begin
if Panel2.Controls[i-1].Tag>=0 then
Panel2.Controls[i-1].Enabled:=true;
end;
DBLookUpComboBox1.SetFocus;
//在处于添加方案状态时,避免进行添加和更新具体接替任务的数据操作,
//也即是关闭DBLookUpListBox1的OnDblClick和OnKeyPress两个事件执行相应程序段
//ProjectAddMode:=true;
end;
procedure TRelay_BaseFrm.DateTimePicker1Change(Sender: TObject);
begin
BeginDateChange:=true;
end;
procedure TRelay_BaseFrm.DateTimePicker2Change(Sender: TObject);
begin
EndDateChange:=true;
end;
procedure TRelay_BaseFrm.DBLookupListBox1Enter(Sender: TObject);
begin
FaceIsEdit:=true;
end;
procedure TRelay_BaseFrm.BitBtn11Click(Sender: TObject);
var
PriorRec:TRelay;//前一条记录
PriorPriorRec:TRelay;
CurrentRec:TRelay; //当前记录
PriorTaskT,CurrentTaskT,PriorInterv,CurrentInterv:integer;
SecondRelay:boolean;//是否是一个施工队的第二个接替任务
begin
if Base_DataS.DataSet.RecordCount=0 then exit;
if Base_DataS.DataSet.FieldByName('Sequence').AsInteger=1 then exit;
if Base_DataS.DataSet.FieldByName('Relay_Id').AsInteger=1 then exit;
//初始任务当前记录不是当前施工队的第二个接替任务
SecondRelay:=false;
with Base_DataS.DataSet do
begin
CurrentRec.Sequence:=FieldByName('Sequence').AsInteger;
CurrentRec.Project_Id:=FieldByName('Project_Id').AsInteger;
CurrentRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
CurrentRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
CurrentRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
CurrentRec.Area:=FieldByName('Area').AsInteger;
CurrentRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
CurrentRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
CurrentRec.E_Date:=FieldByName('End_Date').AsDateTime;
end;
Base_DataS.DataSet.Prior;
with Base_DataS.DataSet do
begin
PriorRec.Sequence:=FieldByName('Sequence').AsInteger;
PriorRec.Project_Id:=FieldByName('Project_Id').AsInteger;
PriorRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
PriorRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
PriorRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
PriorRec.Area:=FieldByName('Area').AsInteger;
PriorRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
PriorRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
PriorRec.E_Date:=FieldByName('End_Date').AsDateTime;
end;
if PriorRec.Relay_Id=1 then SecondRelay:=true;
if Base_DataS.DataSet.FieldByName('Sequence').AsInteger<>1 then //如果不是第二条记录,则读取上上条记录的信息
begin
Base_DataS.DataSet.Prior;
with Base_DataS.DataSet do
begin
PriorPriorRec.Sequence:=FieldByName('Sequence').AsInteger;
PriorPriorRec.Project_Id:=FieldByName('Project_Id').AsInteger;
PriorPriorRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
PriorPriorRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
PriorPriorRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
PriorPriorRec.Area:=FieldByName('Area').AsInteger;
PriorPriorRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
PriorPriorRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
PriorPriorRec.E_Date:=FieldByName('End_Date').AsDateTime;
end;
Base_DataS.DataSet.Next;
PriorInterv:=round(PriorRec.B_Date-PriorPriorRec.E_Date);
end;
//若当前记录的前一条记录是首采面,则要寻找该首采面的回采开始前的间歇时间,
//因为作为首采面是不考虑开始前的间歇时间的,所以在接替表中无法得出间歇时间,
//要通过其它表来查询得出
if SecondRelay
then
begin
Data_Frm.Face_AdoTab.Locate('Face_Id',PriorRec.Face_Lane,[locaseinsensitive]);
PriorRec.TechnicType:=Data_Frm.Face_AdoTab.fieldbyname('Technic_Type').AsInteger;
Data_Frm.MineInterval_AdoTab.Locate('Technic_Type',PriorRec.TechnicType,[locaseinsensitive]);
PriorRec.Interval:=Data_Frm.MineInterval_AdoTab.fieldbyname('Interval_Time').AsInteger;
PriorInterv:=PriorRec.Interval;
end;
Base_DataS.DataSet.Next;
CurrentInterv:=round(CurrentRec.B_Date-PriorRec.E_Date);
PriorTaskT:=round(PriorRec.E_Date-PriorRec.B_Date);
CurrentTaskT:=round(CurrentRec.E_Date-CurrentRec.B_Date);
if (CurrentRec.Project_Id=PriorRec.Project_Id)
and(CurrentRec.Relay_Route=PriorRec.Relay_Route)
then
begin
if not SecondRelay then
begin
//修改当前记录的工作面,采区,开始日期和结束日期
Base_DataS.DataSet.Edit;
with Base_DataS.DataSet do
begin
//if not Data_Frm.Face_AdoTab.Locate('Face_Id',PriorRec.Face_Lane,[locaseinsensitive])
//then exit;
FieldByName('Face_Lane').AsInteger:=PriorRec.Face_Lane;
FieldByName('Area').AsInteger:=PriorRec.Area;
FieldByName('Begin_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv+CurrentTaskT+PriorInterv;
FieldByName('End_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv+CurrentTaskT+PriorInterv+PriorTaskT;
Post;
end;
Base_DataS.DataSet.Prior;
//修改当前记录的前一条记录的工作面,采区,开始日期和结束日期
Base_DataS.DataSet.Edit;
with Base_DataS.DataSet do
begin
//if not Data_Frm.Face_AdoTab.Locate('Face_Id',CurrentRec.Face_Lane,[locaseinsensitive])
//then exit;
FieldByName('Face_Lane').AsInteger:=CurrentRec.Face_Lane;
FieldByName('Area').AsInteger:=CurrentRec.Area;
FieldByName('Begin_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv;
FieldByName('End_Date').AsDateTime:=PriorPriorRec.E_Date+CurrentInterv+CurrentTaskT;
Post;
end;
end;
if SecondRelay then
begin
//修改当前记录的工作面,采区,开始日期和结束日期
Base_DataS.DataSet.Edit;
with Base_DataS.DataSet do
begin
//if not Data_Frm.Face_AdoTab.Locate('Face_Id',PriorRec.Face_Lane,[locaseinsensitive])
//then exit;
FieldByName('Face_Lane').AsInteger:=PriorRec.Face_Lane;
FieldByName('Area').AsInteger:=PriorRec.Area;
FieldByName('Begin_Date').AsDateTime:=PriorRec.B_Date+CurrentTaskT+PriorInterv;
FieldByName('End_Date').AsDateTime:=PriorRec.B_Date+CurrentTaskT+PriorInterv+PriorTaskT;
Post;
end;
Base_DataS.DataSet.Prior;
//修改当前记录的前一条记录的工作面,采区,开始日期和结束日期
Base_DataS.DataSet.Edit;
with Base_DataS.DataSet do
begin
//if not Data_Frm.Face_AdoTab.Locate('Face_Id',CurrentRec.Face_Lane,[locaseinsensitive])
//then exit;
FieldByName('Face_Lane').AsInteger:=CurrentRec.Face_Lane;
FieldByName('Area').AsInteger:=CurrentRec.Area;
FieldByName('Begin_Date').AsDateTime:=PriorRec.B_Date;
FieldByName('End_Date').AsDateTime:=PriorRec.B_Date+CurrentTaskT;
Post;
end;
end;
end;
end;
procedure TRelay_BaseFrm.BitBtn12Click(Sender: TObject);
var
CurrentNextRec:TRelay;//前一条记录
CurrentPriorRec:TRelay;
CurrentRec:TRelay; //当前记录
CurrentNextTaskT,CurrentTaskT,CurrentNextInterv,CurrentInterv:integer;
FirstRelay:boolean;//是否是一个施工队的第二个接替任务
CurrentRecNo,LastRecNo:integer;
MK:Tbookmark;
begin
if Base_DataS.DataSet.RecordCount=0 then exit;
CurrentRecNo:=Base_DataS.DataSet.RecNo;
MK:=Base_DataS.DataSet.GetBookmark;
Base_DataS.DataSet.Last;
LastRecNo:=Base_DataS.DataSet.RecNo;
Base_DataS.DataSet.GotoBookmark(MK);
if CurrentRecNo=LastRecNo then exit;//如果是最后一条记录
with Base_DataS.DataSet do
begin
CurrentRec.Sequence:=FieldByName('Sequence').AsInteger;
CurrentRec.Project_Id:=FieldByName('Project_Id').AsInteger;
CurrentRec.Relay_Route:=FieldByName('Relay_Route').AsInteger;
CurrentRec.Relay_Id:=FieldByName('Relay_Id').AsInteger;
CurrentRec.Face_Lane:=FieldByName('Face_Lane').AsInteger;
CurrentRec.Area:=FieldByName('Area').AsInteger;
CurrentRec.WorkGroup:=FieldByName('WorkGroup').AsInteger;
CurrentRec.B_Date:=FieldByName('Begin_Date').AsDateTime;
CurrentRec.E_Date:=FieldByName('End_Date').AsDateTime;
end;
CurrentTaskT:=round(CurrentRec.E_Date-CurrentRec.B_Date);
FirstRelay:=false;//初始假定不是当前施工队的首采面
if CurrentRec.Relay_Id=1 then FirstRelay:=true;
if not FirstRelay then //若不是首采面
begin
Base_DataS.DataSet.Prior;
with Base_DataS.DataSet do
begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -