📄 dataanalyseformunit1.pas
字号:
//j:=23;
j:=24;
TranslateCurveDataOneVer(DataModule1.adoquery1.FieldValues['曲线数据'],DataModule1.adoquery1.FieldValues['计数轮'],curvedata);
//for i:=0 to 23 do
for i:=0 to 24 do
begin
curveday[i]:=curvedata[j+strtoint(rightstr(DataModule1.adoquery1.FieldValues['曲线开始时间'],2))-1];
j:=j-1;
end;
end
else
begin
temp:='SELECT 曲线数据表.注册号, MIN(曲线数据表.设备上传时间) AS 设备上传时间,曲线数据表.本期指数, 当前数据表.计数轮, MIN(曲线数据表.曲线开始时间) AS 曲线开始时间, 曲线数据表.曲线数据 ';
temp:=temp+' FROM 曲线数据表 INNER JOIN 当前数据表 ON 曲线数据表.注册号 = 当前数据表.注册号 ';
temp:=temp+' GROUP BY 曲线数据表.注册号, 曲线数据表.本期指数, 曲线数据表.曲线数据, 当前数据表.计数轮 ';
temp:=temp+' HAVING (曲线数据表.注册号 = '''+trim(userno)+''') AND (CONVERT(varchar(10), MIN(曲线数据表.设备上传时间), 21) = '''+formatdatetime('yyyy-mm-dd',incday(strtodate(trim(yearstr)+'-'+trim(monthstr)+'-'+trim(daystr)),2))+''')';
DataModule1.adoquery1.Connection:=DataModule1.ADOConnection1;
DataModule1.adoquery1.SQL.Clear;
DataModule1.ADOQuery1.Filtered:=false;
DataModule1.adoquery1.Close;
DataModule1.adoquery1.SQL.Add(temp);
DataModule1.adoquery1.Prepared;
DataModule1.adoquery1.open;
if DataModule1.adoquery1.RecordCount<>0 then
begin
//j:=47;
j:=48; //2005-12-06
TranslateCurveDataOneVer(DataModule1.adoquery1.FieldValues['曲线数据'],DataModule1.adoquery1.FieldValues['计数轮'],curvedata);
for i:=0 to 24 do
//for i:=0 to 23 do //2005-12-06
begin
curveday[i]:=curvedata[j+strtoint(rightstr(DataModule1.adoquery1.FieldValues['曲线开始时间'],2))];
j:=j-1;
end;
end
else
begin
temp:='SELECT 曲线数据表.注册号, MIN(曲线数据表.设备上传时间) AS 设备上传时间,曲线数据表.本期指数, 当前数据表.计数轮, MIN(曲线数据表.曲线开始时间) AS 曲线开始时间, 曲线数据表.曲线数据 ';
temp:=temp+' FROM 曲线数据表 INNER JOIN 当前数据表 ON 曲线数据表.注册号 = 当前数据表.注册号 ';
temp:=temp+' GROUP BY 曲线数据表.注册号, 曲线数据表.本期指数, 曲线数据表.曲线数据, 当前数据表.计数轮 ';
temp:=temp+' HAVING (曲线数据表.注册号 = '''+trim(userno)+''') AND (CONVERT(varchar(10), MIN(曲线数据表.设备上传时间), 21) = '''+formatdatetime('yyyy-mm-dd',strtodate(trim(yearstr)+'-'+trim(monthstr)+'-'+trim(daystr)))+''')';
DataModule1.adoquery1.Connection:=DataModule1.ADOConnection1;
DataModule1.adoquery1.SQL.Clear;
DataModule1.ADOQuery1.Filtered:=false;
DataModule1.adoquery1.Close;
DataModule1.adoquery1.SQL.Add(temp);
DataModule1.adoquery1.Prepared;
DataModule1.adoquery1.open;
if DataModule1.adoquery1.RecordCount <>0 then
begin
TranslateCurveDataOneVer(DataModule1.adoquery1.FieldValues['曲线数据'],DataModule1.adoquery1.FieldValues['计数轮'],curvedata);
for i:=0 to (strtoint(rightstr(DataModule1.adoquery1.FieldValues['曲线开始时间'],2))-1) do
curveday[i]:=curvedata[strtoint(rightstr(DataModule1.adoquery1.FieldValues['曲线开始时间'],2))-1-i];
temp:='SELECT 曲线数据表.注册号, MIN(曲线数据表.设备上传时间) AS 设备上传时间,曲线数据表.本期指数, 当前数据表.计数轮, MIN(曲线数据表.曲线开始时间) AS 曲线开始时间, 曲线数据表.曲线数据 ';
temp:=temp+' FROM 曲线数据表 INNER JOIN 当前数据表 ON 曲线数据表.注册号 = 当前数据表.注册号 ';
temp:=temp+' GROUP BY 曲线数据表.注册号, 曲线数据表.本期指数, 曲线数据表.曲线数据, 当前数据表.计数轮 ';
temp:=temp+' HAVING (曲线数据表.注册号 = '''+trim(userno)+''') AND (CONVERT(varchar(10), MIN(曲线数据表.设备上传时间), 21) = '''+formatdatetime('yyyy-mm-dd',incday(strtodate(trim(yearstr)+'-'+trim(monthstr)+'-'+trim(daystr)),3))+''')';
DataModule1.adoquery2.Connection:=DataModule1.ADOConnection1;
DataModule1.adoquery2.SQL.Clear;
DataModule1.ADOQuery2.Filtered:=false;
DataModule1.adoquery2.Close;
DataModule1.adoquery2.SQL.Add(temp);
DataModule1.adoquery2.Prepared;
DataModule1.adoquery2.open;
if DataModule1.adoquery2.RecordCount <>0 then
begin
j:=0;
TranslateCurveDataOneVer(DataModule1.adoquery2.FieldValues['曲线数据'],DataModule1.adoquery2.FieldValues['计数轮'],curvedata);
for i:=strtoint(rightstr(DataModule1.adoquery2.FieldValues['曲线开始时间'],2))to 24 do //2005-12-06
//for i:=strtoint(rightstr(DataModule1.adoquery2.FieldValues['曲线开始时间'],2))to 23 do
begin
curveday[i]:=curvedata[71-j];
inc(j);
end;
end
else
begin
//for i:=strtoint(rightstr(DataModule1.adoquery1.FieldValues['曲线开始时间'],2)) to 23 do //2005-12-06
//curveday[i]:=inttostr(0);
for i:=strtoint(rightstr(DataModule1.adoquery1.FieldValues['曲线开始时间'],2)) to 24 do
curveday[i]:='';
end;
end
else
begin
//for i:=0 to 23 do //2005-12-06
//curveday[i]:=inttostr(0);
for i:=0 to 24 do
curveday[i]:='';
end;
end;
end;
result:=1;
except
on e:exception do
begin
result:=0;
end;
end;
end;
function TDataAnalyseForm.GetCurveDayWctu(userno,yearstr,monthstr,daystr:string; var curveday:array of string):integer;
var
temp:string;
i,j,k:integer;
dangl:real;
tempfj:Variant;
cureflag:boolean;
begin
try
cureflag:=false;
for k:=1 to 37 do
begin
temp:='select * from 曲线数据表 where (注册号 = '''+trim(userno)+''') AND(CONVERT(varchar(10),设备上传时间, 21) = '''+formatdatetime('yyyy-mm-dd',incday(strtodate(trim(yearstr)+'-'+trim(monthstr)+'-'+trim(daystr)),k))+''') and (设备类型=''WCTU'')' ;
DataModule1.adoquery1.Connection:=DataModule1.ADOConnection1;
DataModule1.adoquery1.SQL.Clear;
DataModule1.adoquery1.Close;
DataModule1.adoquery1.Filtered:=false;
DataModule1.adoquery1.SQL.Add(temp);
DataModule1.adoquery1.Prepared;
DataModule1.adoquery1.open;
if DataModule1.adoquery1.RecordCount<>0 then
begin
cureflag:=true;
tempfj:=midstr(DataModule1.adoquery1.FIELDbyname('设备ID号').AsString,7,1);
if tempfj='D' then
dangl:=0.01
else if tempfj='E' then
dangl:=0.1
else if tempfj='F' then
dangl:=1.0
else if tempfj='0' then
dangl:=10
else if tempfj='1' then
dangl:=100;
tempfj:=floattostr(dangl * 0.1); //计数轮
//j:=(k-1)*24+23;
j:=(37-k)*24;
TranslateCurveDataWctu(DataModule1.adoquery1.FieldValues['曲线数据'],tempfj,curvedatawctu);
//for i:=0 to 23 do
for i:=0 to 24 do
begin
curveday[i]:=curvedatawctu[j+(23-strtoint(rightstr(DataModule1.adoquery1.FieldValues['曲线开始时间'],2)))];
//j:=j-1;
j:=j+1;
end;
break;
end;
end;
if not cureflag then
begin
application.MessageBox('无可用数据,可供绘制曲线!','提示',mb_iconinformation);
exit;
end;
except
on e:exception do
begin
result:=0;
end;
end;
end;
function TDataAnalyseForm.GetCurveMonth(userno,yearstr,monthstr:string;var curvemonth:array of string):integer;
var
//temp:string;
i,j,k,sumday:integer;
year,month,day:word;
begin
try
//获得天数j;
case strtoint(monthstr) of
1,3,5,7,8,10,12:
j:=31;
4,6,9,11:
j:=30;
2:
begin
if isleapyear(strtoint(yearstr)) then
j:=29
else
j:=28;
end;
end;
sumday:=0;
for i:=0 to (j-1) do
begin
decodedate(incday(strtodate(trim(yearstr)+'-'+trim(monthstr)+'-'+'01'),i),year,month,day);
getcurveday(userno,inttostr(year),inttostr(month),inttostr(day),curveday);
for k:=1 to 24 do
sumday:=sumday+strtoint(curveday[k-1]);
curvemonth[i]:=inttostr(sumday);
sumday:=0;
end;
result:=1;
except
on e:exception do
begin
result:=0;
end;
end;
end;
function TDataAnalyseForm.GetCurveWeek(userno,yearstr,monthstr,daystr:string;var curveweek:array of string):integer;
var
i,j,sumweek:integer;
year,month,day:word;
begin
try
for i:=0 to 6 do
begin
decodedate(incday(strtodate(trim(yearstr)+'-'+trim(monthstr)+'-'+trim(daystr)),i),year,month,day);
getcurveday(userno,inttostr(year),inttostr(month),inttostr(day),curveday);
sumweek:=0;
for j:=1 to 24 do
sumweek:=sumweek+strtoint(curveday[j-1]);
curveweek[i]:=inttostr(sumweek);
sumweek:=0;
end;
result:=1;
except
on e:exception do
begin
result:=0;
end;
end;
end;
function TDataAnalyseForm.GetCurveyear(userno,yearstr:string;var curveyear:array of string):integer;
var
//temp:string;
i,k,summonth:integer;
year,month,day:word;
begin
try
summonth:=0;
for i:=0 to 11 do
begin
decodedate(incmonth(strtodate(trim(yearstr)+'-'+'01'+'-'+'01'),i),year,month,day);
getcurvemonth(userno,inttostr(year),inttostr(month),curvemonth);
summonth:=0;
for k:=1 to 31 do
begin
if curvemonth[k-1]<>'' then
summonth:=summonth+strtoint(curvemonth[k-1])
else
break;
end;
curveyear[i]:=inttostr(summonth);
summonth:=0;
end;
result:=1;
except
on e:exception do
begin
result:=0;
end;
end;
end;
function TDataAnalyseForm.GetCurveQuarter(userno,yearstr:string;var curvequarter:array of string):integer;
var
i,j,k,summonth:integer;
begin
try
getcurveyear(userno,yearstr,curveyear);
summonth:=0;
k:=0;
for i:=0 to 3 do
begin
for j:=0 to 2 do
begin
summonth:=summonth+strtoint(curveyear[k]);
inc(k);
end;
curvequarter[i]:=inttostr(summonth);
summonth:=0;
end;
result:=1;
except
on e:exception do
begin
result:=0;
end;
end;
end;
procedure TDataAnalyseForm.N10Click(Sender: TObject);
//var
//eclApp,WorkBook,sheet:Variant;{声明为OLE Automation对象}
//i,j:integer;
begin
{try
eclApp:=CreateOleObject('Excel.Application');
except
ShowMessage('您的机器里未安装Microsoft Excel.');
Exit;
end;
if adoquery1.RecordCount <>0 then
begin
eclApp.WorkBooks.Add(extractfilepath(application.ExeName)+'\temp1.xls');
workbook:=eclapp.workbooks[1];
sheet:=workbook.ActiveSheet;
eclApp.displayAlerts:=false;
eclApp.ScreenUpdating:=true;
j:=1;
for i:=1 to adoquery1.RecordCount do
begin
sheet.cells[j+1,1].value:=trim(adoquery1.FieldValues['注册号']);
sheet.cells[j+1,2].value:=trim(ADOQuery1.FieldValues['用户名称']);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -