📄 u_data.pas
字号:
unit u_data;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables;
type
TDM_main = class(TDataModule)
Database: TDatabase;
Q_login: TQuery;
DS_login: TDataSource;
T_person: TTable;
DS_person: TDataSource;
T_code: TTable;
DS_code: TDataSource;
DS_wp_ungroup: TDataSource;
DS_wp_group: TDataSource;
Q_wp_ungroup: TQuery;
Q_wp_group: TQuery;
T_group: TTable;
DS_group: TDataSource;
Q_change_group: TQuery;
T_equip: TTable;
T_merchant: TTable;
T_workplace: TTable;
DS_equip: TDataSource;
DS_merchant: TDataSource;
DS_workplace: TDataSource;
Q_equip_num: TQuery;
T_movement: TTable;
DS_movement: TDataSource;
T_workplace2: TTable;
DS_workplace2: TDataSource;
T_equip2: TTable;
DS_equip2: TDataSource;
T_fail: TTable;
DS_fail: TDataSource;
T_equip3: TTable;
T_mode: TTable;
T_cause: TTable;
T_consequence: TTable;
T_result: TTable;
DS_equip3: TDataSource;
DS_mode: TDataSource;
DS_cause: TDataSource;
DS_consequence: TDataSource;
DS_result: TDataSource;
Q_equip: TQuery;
DS_q_equip: TDataSource;
Q_fail_rec: TQuery;
Q_move_rec: TQuery;
Q_reliability: TQuery;
DS_fail_rec: TDataSource;
DS_move_rec: TDataSource;
DS_reliability: TDataSource;
T_group_list: TTable;
DS_group_list: TDataSource;
T_distribution: TTable;
DS_distribution: TDataSource;
Q_member: TQuery;
Q_fail_list: TQuery;
Q_install_time: TQuery;
procedure T_personNewRecord(DataSet: TDataSet);
procedure T_groupAfterScroll(DataSet: TDataSet);
procedure T_equipNewRecord(DataSet: TDataSet);
procedure T_movementNewRecord(DataSet: TDataSet);
procedure T_movementBeforePost(DataSet: TDataSet);
procedure T_failNewRecord(DataSet: TDataSet);
procedure Q_equipAfterScroll(DataSet: TDataSet);
private
procedure ConnectDB(server, user, passwd:String);
public
function Login(server, user, passwd:String):Boolean;
procedure Logout;
procedure OpenPerson;
procedure SetPassword(passwd:String);
procedure SetCodeTable(TabName:String);
procedure OpenGroup;
procedure AddToGroup;
procedure DelFromGroup;
procedure OpenEquip;
procedure OpenMovement;
procedure OpenFail;
procedure SetQuery(workplace:String;StartTime, EndTime:TDate);
procedure OpenGroupList;
procedure Analyse;
procedure SaveResult;
end;
var
DM_main: TDM_main;
implementation
uses crypt, u_main, u_analyse, u_EstimateInt;
{$R *.DFM}
procedure TDM_main.ConnectDB(server, user, passwd:String);
begin
with Database do
begin
Connected:=False;
Params.Values['SERVER NAME']:=server;
Params.Values['USER NAME']:=user;
Params.Values['PASSWORD']:=passwd;
Connected:=True;
end;
end;
function TDM_main.Login(server, user, passwd:String):Boolean;
var
authority:String;
begin
ConnectDB(server, 'ERUSR', 'password');
passwd:=Copy(passwd+passwd, 1, 10);
passwd:=Encrypt(passwd, 222);
with Q_login do
begin
Close;
Params.ParamValues['ID']:=user;
Params.ParamValues['PASSWD']:=passwd;
Open;
Result:=( not IsEmpty);
if not IsEmpty then
begin
authority:=FieldValues['AUTHORITY'];
case StrToInt(authority) of
0: ConnectDB(server, 'ERUSR', 'password');
1: ConnectDB(server, 'ERDM', 'password');
2: ConnectDB(server, 'ERDBA', 'password');
end;
Open;
end
else
Database.Connected:=False;
end;
end;
procedure TDM_main.Logout;
begin
Database.Connected:=False;
Database.Params.Values['PASSWORD']:='';
end;
procedure TDM_main.OpenPerson;
begin
T_person.Open;
end;
procedure TDM_main.T_personNewRecord(DataSet: TDataSet);
begin
with DataSet do
begin
FieldValues['PASSWD']:='';
end;
end;
procedure TDM_main.SetPassword(passwd:String);
begin
passwd:=Copy(passwd+passwd, 1, 10);
passwd:=Encrypt(passwd, 222);
with T_person do
begin
Edit;
FieldValues['PASSWD']:=passwd;
Post;
end;
end;
procedure TDM_main.SetCodeTable(TabName:String);
begin
with T_code do
begin
Close;
TableName:=TabName;
Open;
end;
end;
procedure TDM_main.OpenGroup;
begin
T_group.Open;
Q_wp_ungroup.Close;
Q_wp_ungroup.Open;
end;
procedure TDM_main.T_groupAfterScroll(DataSet: TDataSet);
begin
Q_wp_group.Close;
Q_wp_group.Params.ParamValues['ID']:=T_group['ID'];
Q_wp_group.Open;
end;
procedure TDM_main.AddToGroup;
begin
with Q_change_group do
begin
Close;
Params.ParamValues['GROUP']:=T_group['ID'];
Params.ParamValues['WORKPLACE']:=Q_wp_ungroup['CODE'];
ExecSQL;
end;
OpenGroup;
end;
procedure TDM_main.DelFromGroup;
begin
with Q_change_group do
begin
Close;
Params.ParamValues['GROUP']:='00000';
Params.ParamValues['WORKPLACE']:=Q_wp_group['CODE'];
ExecSQL;
end;
OpenGroup;
end;
procedure TDM_main.OpenEquip;
begin
T_equip.Open;
T_merchant.Open;
T_workplace.Open;
end;
procedure TDM_main.T_equipNewRecord(DataSet: TDataSet);
var
counter:Integer;
equip_id:String;
begin
with Q_equip_num do
begin
Open;
counter:=FieldValues['COUNT'];
Close;
end;
equip_id:='00000'+IntToStr(counter);
equip_id:=Copy(equip_id, Length(equip_id)-5, 6);
equip_id:=FormatDateTime('yymmdd', now)+equip_id;
T_equip['ID']:=equip_id;
T_equip['BUY_DATE']:=now;
end;
procedure TDM_main.OpenMovement;
begin
T_movement.Open;
T_workplace2.Open;
T_equip2.Open;
end;
procedure TDM_main.T_movementNewRecord(DataSet: TDataSet);
begin
T_movement['ID']:=0;
T_movement['MOVE_DATE']:=now;
T_movementBeforePost(DataSet);
end;
procedure TDM_main.T_movementBeforePost(DataSet: TDataSet);
begin
with DataSet do
begin
FieldValues['LAST_MODIFY']:=now;
FieldValues['PERSON']:=F_main.i_user.Text;
end;
end;
procedure TDM_main.OpenFail;
begin
T_fail.Open;
T_equip3.Open;
T_mode.Open;
T_cause.Open;
T_consequence.Open;
T_result.Open;
end;
procedure TDM_main.T_failNewRecord(DataSet: TDataSet);
begin
T_fail['ID']:=0;
T_fail['FIND_DATE']:=now;
T_fail['END_DATE']:=now;
T_movementBeforePost(DataSet);
end;
procedure TDM_main.SetQuery(workplace:String;StartTime, EndTime:TDate);
begin
with Q_equip do
begin
Close;
Params.ParamValues['WORKPLACE']:=workplace;
Params.ParamValues['START_TIME']:=StartTime;
Params.ParamValues['END_TIME']:=EndTime;
Open;
end;
with Q_fail_rec do
begin
Close;
Params.ParamValues['EQUIP']:=Q_equip['EQUIP'];
Params.ParamValues['START_TIME']:=StartTime;
Params.ParamValues['END_TIME']:=EndTime;
Open;
end;
with Q_move_rec do
begin
Close;
Params.ParamValues['EQUIP']:=Q_equip['EQUIP'];
Params.ParamValues['START_TIME']:=StartTime;
Params.ParamValues['END_TIME']:=EndTime;
Open;
end;
with Q_reliability do
begin
Close;
Params.ParamValues['EQUIP']:=Q_equip['EQUIP'];
Open;
end;
end;
procedure TDM_main.Q_equipAfterScroll(DataSet: TDataSet);
begin
with Q_fail_rec do
begin
Close;
Params.ParamValues['EQUIP']:=Q_equip['EQUIP'];
Open;
end;
with Q_move_rec do
begin
Close;
Params.ParamValues['EQUIP']:=Q_equip['EQUIP'];
Open;
end;
with Q_reliability do
begin
Close;
Params.ParamValues['EQUIP']:=Q_equip['EQUIP'];
Open;
end;
end;
procedure TDM_main.OpenGroupList;
begin
T_group_list.Open;
T_distribution.Open;
end;
procedure TDM_main.Analyse;
var
EndTime:TDate;
TimeList:TTimeList;
SampleRList:TSampleRList;
RecordLength:Integer;
TimeMark, TimeStep, TimeEnd:TDateTime;
Installed, EquipDistroyed:Boolean;
Distribution:String;
i:Integer;
MTTF, P1, P2, P3, F:Double;
begin
//初始化
EndTime:=F_analyse.i_end_time.Date;
SetLength(TimeList, 0);
with Q_member do
begin
Close;
Params.ParamValues['GROUP']:=T_group_list['ID'];
Open;//获取成员列表
First;
while not Eof do
begin//逐个扫描成员
with Q_install_time do
begin
Params.ParamValues['EQUIP']:=Q_member['ID'];
Open;//获取安装信息
Installed:=(not IsEmpty);//是否安装使用
if installed then
TimeMark:=FieldValues['MOVE_DATE'];//记录投入使用时间
Close;
end;
if installed then
begin
with Q_fail_list do
begin
Close;
Params.ParamValues['EQUIP']:=Q_member['ID'];
Params.Paramvalues['END_TIME']:=EndTime;
Open;//提取指定时间范围内的失效记录
First;
EquipDistroyed:=True;
while not Eof do
begin//遍历失效记录
SetLength(TimeList, length(TimeList)+1);//增加记录
TimeList[length(TimeList)-1].Time:=FieldValues['FIND_DATE']-TimeMark;
TimeList[length(TimeList)-1].Failed:=True;
TimeMark:=FieldValues['END_DATE'];
EquipDistroyed:=(FieldValues['RESULT']<>'0');
Next;//下一个失效记录
end;
if (not EquipDistroyed) and (EndTime>TimeMark) then
begin//截尾数据
SetLength(TimeList, length(TimeList)+1);//增加记录
TimeList[length(TimeList)-1].Time:=FieldValues['FIND_DATE']-TimeMark;
TimeList[length(TimeList)-1].Failed:=False;
end;
end;
end;
Next;//下一个成员
end;
end;
F_analyse.Series1.Clear;//清除原有曲线
F_analyse.Series2.Clear;
if length(TimeList)>0 then
begin
SetLength(SampleRList, length(TimeList));
RecordLength:=TruncationR(TimeList, SampleRList);//计算截尾数据可靠性
SetLength(SampleRList, RecordLength);
for i:=0 to RecordLength-1 do//加入数据点
F_analyse.Series1.AddXY(SampleRList[i].Time, 1-SampleRList[i].R);
MTTF:=ExpDistPointEsti(TimeList);
P1:=1/MTTF;
P2:=0;
P3:=0;
Distribution:=T_group_list['DISTRIBUTION'];
if Distribution='1' then
begin//二参数威布尔分布估计
Weibull2PointEstiLeast(TimeList, P1, P2);
end;
with F_analyse do
begin//显示参数
o_mttf.Text:=FloatToStrF(MTTF, ffFixed, 5, 2);
o_p1.Text:=FloatToStrF(P1, ffFixed, 5, 2);
o_p2.Text:=FloatToStrF(P2, ffFixed, 5, 2);
o_p3.Text:=FloatToStrF(P3, ffFixed, 5, 2);
end;
TimeMark:=SampleRList[0].Time;
TimeEnd:=SampleRList[length(SampleRList)-1].Time;
TimeStep:=(TimeEnd-TimeMark)/10;
while TimeMark<TimeEnd do
begin
if Distribution='0' then
F:=ExpDistFT(P1, TimeMark)
else
F:=WeibullDistFT(P1, P2, P3, TimeMark);
F_analyse.Series2.AddXY(TimeMark, F);
TimeMark:=TimeMark+TimeStep;
end;
end;
end;
procedure TDM_main.SaveResult;
var
MTTF, P1, P2, P3:Single;
begin
with F_analyse do
begin
MTTF:=StrToFloat(o_mttf.Text);
P1:=StrToFloat(o_p1.Text);
P2:=StrToFloat(o_p2.Text);
P3:=StrToFloat(o_p3.Text);
end;
with T_group_list do
begin
Edit;
FieldValues['MTTF']:=MTTF;
FieldValues['R1']:=P1;
FieldValues['R2']:=P2;
FieldValues['R3']:=P3;
Post;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -