📄 dataanalysis.pas
字号:
unit DataAnalysis;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, StdCtrls, Grids, DBGrids, QuickRpt, Qrctrls, ExtCtrls,
ComCtrls,wsTypes,wsCores, ActnList;
type
TfrmDataAnalysis = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
TreeViewSelect: TTreeView;
DateTimePicker1: TDateTimePicker;
Label5: TLabel;
Splitter1: TSplitter;
Panel4: TPanel;
Panel5: TPanel;
Panel6: TPanel;
StringGrid1: TStringGrid;
QuickRep1: TQuickRep;
PageHeaderBand1: TQRBand;
QRLabel17: TQRLabel;
QRExpr1: TQRExpr;
QRSysData1: TQRSysData;
QRLabel18: TQRLabel;
QRLabel19: TQRLabel;
DetailBand1: TQRBand;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRLabel1: TQRLabel;
ButtonRefresh: TButton;
ButtonPrint: TButton;
ButtonDelete: TButton;
ButtonClose: TButton;
dsViewProjectID: TDataSource;
ViewProjectID: TTable;
ViewProjectIDClass: TStringField;
ViewProjectIDACode: TStringField;
ViewProjectIDCodeMeaning: TStringField;
dsViewPH: TDataSource;
ViewPH: TTable;
ViewPHProjectID: TStringField;
ViewPHHourseID: TStringField;
ViewPHHourseIDLookup: TStringField;
ActionListData: TActionList;
ActionDelete: TAction;
ActionPrint: TAction;
ActionRefresh: TAction;
Table1AutoInc: TAutoIncField;
Table1DDate: TDateTimeField;
Table1HourseID: TStringField;
Table1ExtensionID: TStringField;
Table1StandardG: TFloatField;
Table1Gravity: TFloatField;
Table1Height: TFloatField;
Table1HorizonDiff: TFloatField;
Table1State: TStringField;
Table1AverageG: TFloatField;
Table1AverageH: TFloatField;
Table1Flag: TStringField;
procedure FormCreate(Sender: TObject);
procedure ButtonCloseClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure QRDBPrint(sender: TObject; var Value: String);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
procedure DateTimePicker1CloseUp(Sender: TObject);
procedure TreeViewSelectChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
procedure TreeViewSelectChange(Sender: TObject; Node: TTreeNode);
procedure ActionDeleteExecute(Sender: TObject);
procedure ActionListDataUpdate(Action: TBasicAction;
var Handled: Boolean);
procedure ActionPrintExecute(Sender: TObject);
procedure ActionRefreshExecute(Sender: TObject);
private
{ Private declarations }
StrHourseID:String;
DDate :TDate;
CurrExtensionCount :Integer;
public
procedure datafresh;
procedure drawrep;
procedure clrrep;
{ Public declarations }
end;
var
frmDataAnalysis: TfrmDataAnalysis;
Qrdb:array of TQRDBText;
Qrlb,Qrlb2:array of TQRLabel;
Ta_Length:Integer;
implementation
uses MainDB;
{$R *.DFM}
procedure TfrmDataAnalysis.clrrep;
var i,n:integer;
begin
n:=Length(Qrdb);
for i:=0 to n-1 do if Qrdb[i]<>nil then Qrdb[i].Free;
n:=Length(Qrlb);
for i:=0 to n-1 do if Qrlb[i]<>nil then Qrlb[i].Free;
end;
procedure TfrmDataAnalysis.FormCreate(Sender: TObject);
var
RootNode,CurrentNode :TTreeNode;
begin
Top:=2;
Left:=2;
Width:=720;
Height:=440;
strHourseID:='';
DDate:=Date();
DateTimePicker1.DateTime:=DDate;
CurrExtensionCount:=0;
ViewProjectID.Open;
ViewPH.Open;
Table1.open;
if dmMainDB.ViewHourseID.State<>dsInactive then
dmMainDB.ViewHourseID.Open
else
dmMainDB.ViewHourseID.First;
try
TreeViewSelect.Items.BeginUpdate;
ViewPH.First;
While Not ViewProjectID.Eof do
begin
RootNode:=TreeViewSelect.Items.Add(nil,ViewProjectID['CodeMeaning']+' ['+ViewProjectID['ACode']+']');
while not ViewPH.Eof do
begin
CurrentNode:=TreeViewSelect.Items.AddChild(RootNode,ViewPH['HourseIDLookup']+' ['+ViewPH['HourseID']+']');
CurrentNode.ImageIndex:=0;
CurrentNode.SelectedIndex:=3;
ViewPH.Next;
end;
ViewProjectID.Next;
end;
finally
TreeViewSelect.FullExpand;
TreeViewSelect.Items.EndUpdate;
end;
if (TreeViewSelect.TopItem<>nil) and (TreeViewSelect.TopItem.getFirstChild<>nil) then
begin
strHourseID:=GetID(TreeViewSelect.TopItem.getFirstChild.Text);
TreeViewSelect.TopItem.getFirstChild.Selected:=True;
end;
ViewProjectID.Close;
ViewPH.Close;
Ta_Length:=-1;
DataFresh();
end;
procedure TfrmDataAnalysis.ButtonCloseClick(Sender: TObject);
begin
Close;
end;
procedure TfrmDataAnalysis.FormActivate(Sender: TObject);
begin
DataFresh;
end;
procedure TfrmDataAnalysis.datafresh;
var
i,j,k,m,avag,avah:integer;
begin
if (strHourseID<>'') and (CurrExtensionCount<>0) then
begin
table1.First;
table1.Filter:='(HourseId=' + StrHourseID+') and ('+'DDate>='+DateToStr(DDate)+') and ('+'DDate<'+DateToStr(DDate+1)+')';
table1.filtered:=true;
k:=CurrExtensionCount;
stringgrid1.ColCount:=k+2;
stringgrid1.RowCount:=(Table1.RecordCount div k)*5+1;
stringgrid1.ColWidths[0]:=130;
stringgrid1.ColWidths[1]:=38;
stringgrid1.Cells[0,0]:=' 时 间';
for i:= 2 to k+1 do
stringgrid1.Cells[i,0]:='设备'+inttostr(i-1);
for i:= 0 to (Table1.RecordCount div k)-1 do
begin
if Table1.Eof then
Break;
stringgrid1.Cells[0,i*5+1]:=table1.Fields[1].AsString;
StringGrid1.Cells[0,i*5+2]:=' 建筑物号:'+strHourseID;
stringgrid1.cells[1,i*5+1]:='标重:';
stringgrid1.cells[1,i*5+2]:='实重:';
stringgrid1.cells[1,i*5+3]:='高度:';
stringgrid1.cells[1,i*5+4]:='水平:';
stringgrid1.cells[1,i*5+5]:='状态:';
avag:=0;
avah:=0;
for j:=1 to k do
begin
for m:=1 to 5 do
begin
stringgrid1.cells[j+1,i*5+m]:=table1.Fields[3+m].AsString;
end;
avag:=avag+table1.Fields[5].AsInteger ;
avah:=avah+table1.Fields[6].AsInteger ;
table1.Next;
end;
avag:=avag div k;
avah:=avah div k;
StringGrid1.Cells[0,i*5+3]:=' 平均重力:'+IntToStr(avag)+'吨';
StringGrid1.Cells[0,i*5+4]:=' 平均高度:'+IntToStr(avah)+'米' ;
end;
end;
end;
procedure TfrmDataAnalysis.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var value,sv:real;
begin
if (ACol>=2) and ((ARow mod 5)=2) then
begin
if stringgrid1.Cells[ACol,ARow]<>'' then
value:=StrToFloat(stringgrid1.Cells[ACol,ARow])
else
Value:=0;
if stringgrid1.Cells[ACol,ARow-1]<>'' then
sv:=strtofloat(stringgrid1.Cells[ACol,ARow-1])
else
sv:=0;
if (value<=(0.7*sv)) or (value>=1.3*sv) then
begin
StringGrid1.Canvas.Brush.Color := clYellow;
if (value<(0.45*sv)) or (value>(1.55*sv)) then
StringGrid1.Canvas.Brush.Color:=clRed;
StringGrid1.Canvas.FrameRect(Rect);
end;
end;
end;
procedure TfrmDataAnalysis.drawrep;
var n,i,lines,spa,left,top0,top1:integer;
begin
n:=CurrExtensionCount;
{lines:=((n-1) div 12)+1;}
lines:=table1.recordcount div 6;
Setlength(Qrdb,n*5); //n*4
Setlength(Qrlb,6); //n
Setlength(Qrlb2,lines*5); //4
DetailBand1.Height:=21*lines;
PageHeaderBand1.Height:=10+7*lines;
spa:=110 div ((n+lines-1) div lines);
left:=22;
top1:=2;
for i:=0 to lines-1 do
begin
Qrlb[i]:=TQRLabel.Create(Application);
Qrlb[i].Parent:=DetailBand1;
Qrlb[i].Left:=left;
Qrlb[i].Top:=top1;
Qrlb[i].Caption:='标重';
Qrlb[i].Font.Name:='楷体';
Qrlb[i+1]:=TQRLabel.Create(Application);
Qrlb[i+1].Parent:=DetailBand1;
Qrlb[i+1].Left:=left;
Qrlb[i+1].Top:=top1+4;
Qrlb[i+1].Caption:='实重';
Qrlb[i+1].Font.Name:='楷体';
Qrlb[i+2]:=TQRLabel.Create(Application);
Qrlb[i+2].Parent:=DetailBand1;
Qrlb[i+2].Left:=left;
Qrlb[i+2].Top:=top1+8;
Qrlb[i+2].Caption:='高度';
Qrlb[i+2].Font.Name:='楷体';
Qrlb[i+3]:=TQRLabel.Create(Application);
Qrlb[i+3].Parent:=DetailBand1;
Qrlb[i+3].Left:=left;
Qrlb[i+3].Top:=top1+12;
Qrlb[i+3].Caption:='水平';
Qrlb[i+3].Font.Name:='楷体';
Qrlb[i+4]:=TQRLabel.Create(Application);
Qrlb[i+4].Parent:=DetailBand1;
Qrlb[i+4].Left:=left;
Qrlb[i+4].Top:=top1+16;
Qrlb[i+4].Caption:='状态';
Qrlb[i+4].Font.Name:='楷体';
top1:=top1+20;
end;
left:=30;
top0:=8;
top1:=2;
for i:=0 to n-1 do
begin
Qrlb[i]:=TQRLabel.Create(Application);
Qrlb[i].Parent:=PageHeaderBand1;
Qrlb[i].Left:=left;
Qrlb[i].Top:=top0;
Qrlb[i].Caption:='设备'+IntToStr(i+1)+#13+'----';
Qrlb[i].Font.Name:='宋体';
Qrdb[i]:=TQRDBText.Create(Application);
Qrdb[i].Parent:=DetailBand1;
Qrdb[i].Left:=left+2;
Qrdb[i].Top:=top1;
Qrdb[i].DataSet:=Table1;
{Qrdb[i*5].DataField:='St'+IntToStr(i+1);}
Qrdb[i].DataField:='standardg';
Qrdb[i+1]:=TQRDBText.Create(Application);
Qrdb[i+1].Parent:=DetailBand1;
Qrdb[i+1].Left:=left+2;
Qrdb[i+1].Top:=top1+4;
Qrdb[i+1].DataSet:=Table1;
{Qrdb[i*5+1].DataField:='F'+IntToStr(i+1);}
Qrdb[i+1].DataField:='gravity';
Qrdb[i+1].Tag:=i+1;
Qrdb[i+1].OnPrint:=QRDBPrint;
Qrdb[i+2]:=TQRDBText.Create(Application);
Qrdb[i+2].Parent:=DetailBand1;
Qrdb[i+2].Left:=left+2;
Qrdb[i+2].Top:=top1+8;
Qrdb[i+2].DataSet:=Table1;
Qrdb[i+2].DataField:='height';
{Qrdb[i*5+2].DataField:='Ang'+IntToStr(i+1);}
Qrdb[i+3]:=TQRDBText.Create(Application);
Qrdb[i+3].Parent:=DetailBand1;
Qrdb[i+3].Left:=left+2;
Qrdb[i+3].Top:=top1+12;
Qrdb[i+3].DataSet:=Table1;
Qrdb[i+3].DataField:='horizondiff';
{Qrdb[i*5+3].DataField:='Ang'+IntToStr(i+1);}
Qrdb[i+4]:=TQRDBText.Create(Application);
Qrdb[i+4].Parent:=DetailBand1;
Qrdb[i+4].Left:=left+2;
Qrdb[i+4].Top:=top1+16;
Qrdb[i+4].DataSet:=Table1;
Qrdb[i+4].DataField:='state';
{Qrdb[i*5+4].DataField:='Sj'+IntToStr(i+1);}
left:=left+spa;
if left>130 then
begin
left:=30;
top1:=top1+20;
top0:=top0+6;
end;
end;
end;
procedure TfrmDataAnalysis.QRDBPrint(sender: TObject; var Value: String);
var v1,v2:real;
i:integer;
s:string;
begin
v1:=StrToFloat(Value);
i:=(sender as TQRDBText).Tag;
// s:='St'+IntToStr(i);
v2:=Table1.FieldByName('standardg').AsFloat;
(sender as TQRDBText).Font.Color:=clWindowText;
if (v1<=(0.7*v2)) or (v1>=1.3*v2) then
begin
(sender as TQRDBText).Font.Color := clYellow;
if (v1<(0.45*v2)) or (v1>(1.55*v2)) then
(sender as TQRDBText).Font.Color:=clRed;
end;
end;
procedure TfrmDataAnalysis.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
procedure TfrmDataAnalysis.FormDestroy(Sender: TObject);
begin
Table1.Close;
end;
procedure TfrmDataAnalysis.DateTimePicker1CloseUp(Sender: TObject);
var s1,s2:string;
next_d:TDateTime;
begin
// next_d:=strtodate(s1)+1;
// s2:=datetostr(next_d);
// table1.Filter:='ddate>=' + s1 + ' And ' + 'ddate<' + s2+ 'and '+'HourseId='
// + edit4.text;
// table1.filtered:=true;
// datafresh;
DDate:=DateTimePicker1.Date;
DataFresh();
end;
procedure TfrmDataAnalysis.TreeViewSelectChanging(Sender: TObject; Node: TTreeNode;
var AllowChange: Boolean);
begin
if Node.Level=1 then
begin
AllowChange:=True;
end
else
begin
AllowChange:=False;
end;
end;
procedure TfrmDataAnalysis.TreeViewSelectChange(Sender: TObject; Node: TTreeNode);
begin
strHourseID:=GetID(Node.Text);
if strHourseID<>'' then
begin
with dmMainDB do
begin
qryPublic.Close;
qryPublic.SQL.CLear;
qryPublic.SQL.Add('Select Count(*) CurrCount from GE Where HourseID='+''''+StrHourseID+'''');
qryPublic.Prepare;
qryPublic.Open;
if not qryPublic.IsEmpty then
CurrExtensionCount:=qryPublic.FieldByName('CurrCount').AsInteger
else
CurrExtensionCount:=0;
qryPublic.Close;
end;
end
else
CurrExtensionCount:=0;
DataFresh();
end;
procedure TfrmDataAnalysis.ActionDeleteExecute(Sender: TObject);
begin
if Application.MessageBox('真的要删除所有的数据吗?','警告信息',MB_OKCancel)=idOK then
begin
try
dmMainDB.MainDB.TransIsolation:=tiDirtyRead;
try
dmMainDB.MainDB.StartTransaction;
with dmMainDB do
begin
qryPublic.Close;
qryPublic.SQL.CLear;
qryPublic.SQL.Add('Delete from Extension Where HourseID='+''''+StrHourseID+'''');
qryPublic.Prepare;
qryPublic.ExecSQL;
qryPublic.Close;
end;
dmMainDB.MainDB.Commit;
except
dmMainDB.MainDB.Rollback;
end;
finally
dmMainDB.MainDB.TransIsolation:=tiReadCommitted;
end;
DataFresh();
end;
end;
procedure TfrmDataAnalysis.ActionListDataUpdate(Action: TBasicAction;
var Handled: Boolean);
begin
ActionDelete.Enabled:=(strHourseID<>'');
end;
procedure TfrmDataAnalysis.ActionPrintExecute(Sender: TObject);
begin
if Table1.FieldCount<>Ta_Length then
begin
clrrep;
drawrep;
Ta_length:=Table1.FieldCount;
end;
QuickRep1.Preview;
end;
procedure TfrmDataAnalysis.ActionRefreshExecute(Sender: TObject);
begin
DataFresh();
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -