📄 frm_sjtj.pas
字号:
unit frm_sjtj;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, ComCtrls,
DateUtils,StrUtils,XSBuiltIns;
type
TFrm_TJ = class(TForm)
B_Start: TButton;
RG_Goal: TRadioGroup;
Label1: TLabel;
PB1: TProgressBar;
Chart1: TChart;
Series1: TBarSeries;
//procedure RadioButton1Click(Sender: TObject);
//procedure RadioButton2Click(Sender: TObject);
//procedure RadioButton4Click(Sender: TObject);
//procedure RadioButton3Click(Sender: TObject);
procedure B_StartClick(Sender: TObject); //数据统计分类
procedure FormCreate(Sender: TObject); //窗体初始化
procedure FormActivate(Sender: TObject); // 窗体rg_goal初始化
procedure RG_GoalClick(Sender: TObject); //选择需要统计的信息,并计算统计信息的条数
procedure FormDestroy(Sender: TObject); //释放临时占用的标签
private
{ Private declarations }
function setfield(fieldname:string):integer; //统计名称编号的条数
function SetAgeField(fieldname:string):integer;//统计年龄的条数
public
{ Public declarations }
end;
var
Frm_TJ: TFrm_TJ;
implementation
uses data_module,frm_SJCX, Unit3;//dmserver;
var
field:array of string; //被统计的对象变量 (获取变量的名称)
count:array of integer; //计数变量
startyear,endyear:array of integer;
fieldname:string; //字段名称编号
reccount:integer; //记录条数
goallist:tstrings; //
tj_tablelist:tstrings;//
agestart:array of integer;
ageend:array of integer;
{$R *.dfm}
function tfrm_tj.setfield(fieldname:string):integer;
var
i:integer;
sqlstr:string;
begin
sqlstr:='select code from code where field_name='+quotedstr(fieldname);
with dm.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add(sqlstr);
open;
result:=recordcount;
pb1.Step:=100 div recordcount; //进度条
setlength(field,recordcount);
setlength(count,recordcount);
first;
i:=0;
while not eof do
begin
field[i]:=fieldbyname('code').AsString;//获取名称
count[i]:=0;
i:=i+1;
next;
end;
end;
end;
procedure TFrm_TJ.B_StartClick(Sender: TObject);
var
step:integer;
i:integer;
strtmp:string;
begin
if reccount=0 then
exit;
chart1.Title.Text.Clear;
chart1.Title.Text.Add('统计结果');
readcursor;
if rg_goal.ItemIndex>-1 then
begin
chart1.Title.Text.Clear;
chart1.Title.Text.Add(rg_goal.Items[rg_goal.ItemIndex]+'统计结果');
end;
step:=chart1.ChartWidth div reccount;
series1.Clear;
for i:=0 to reccount-1 do
begin
strtmp:=field[i];
series1.AddXY(chart1.ChartRect.Left+(i+1)*step,count[i],strtmp,clred);
end;
ResumeCursor;
end;
procedure TFrm_TJ.FormCreate(Sender: TObject);
begin
pb1.Position:=0;
tj_tablelist:=tstringlist.Create;
goallist:=tstringlist.Create;
end;
procedure TFrm_TJ.FormActivate(Sender: TObject);
begin
RG_Goal.Items.Clear;
tj_tablelist.Clear;
goallist.Clear;
with dm.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select distinct count_field,count_name from count_table where yn order by count_field');
open;
if not eof then
begin
while not eof do
begin
if pos(fieldbyname('count_field').AsString,frm_sjcx.m_fieldlist)<>0 then
begin
RG_Goal.Items.Add(fieldbyname('count_name').AsString);
goallist.Add(fieldbyname('count_field').AsString);
end;
next;
end;
end;
end;
end;
procedure TFrm_TJ.RG_GoalClick(Sender: TObject);
var
fieldname:string;
i:integer;
stemp:string;
m_age:integer;
m_pfieldstr,m_ptablestr,m_pconnstr:string;
begin
pb1.Position:=pb1.Min; //2006-03 zjx
ReadCursor;
fieldname:=goallist[rg_goal.ItemIndex];
if lowercase(trim(fieldname))<>'a0103' then //2006-03
reccount:=setfield(fieldname)
else //如果是年龄统计
reccount:=setagefield(fieldname);
dm.ADOQuery4.First;
while not dm.ADOQuery4.Eof do
begin
if lowercase(fieldname)<>'a0103' then
begin
for i:=0 to reccount-1 do
begin
if dm.ADOQuery4.FieldByName(fieldname).AsString=field[i] then
begin
count[i]:=count[i]+1;
break;
end;
end;
end
else
begin
m_age:= yearof(now)-strtointdef(leftstr(dm.ADOQuery4.FieldByName(fieldname).AsString,4),0);
for i:=0 to reccount-1 do
begin
if (m_age>=agestart[i]) and (m_age<=ageend[i]) then
begin
count[i]:=count[i]+1;
break;
end;
end;
end;
//end;
pb1.Position:=pb1.Position+pb1.Step;
dm.ADOQuery4.Next;
end;
pb1.Position:=pb1.Max;
ResumeCursor; //2006-03 zjx
end;
function TFrm_TJ.SetAgeField(fieldname:string):integer;
var
i:integer;
begin
with dm.ADOQuery1 do
begin
close;
sql.Clear;
sql.Add('select * from count_table where count_field='+quotedstr(fieldname));
open;
result:=recordcount;
pb1.Step:=100 div recordcount;
setlength(field,recordcount);
setlength(count,recordcount);
setlength(agestart,recordcount);
setlength(ageend,recordcount);
first;
i:=0;
while not eof do
begin
field[i]:=fieldbyname('count_statement').AsString;
count[i]:=0;
agestart[i]:=fieldbyname('start_condition').AsInteger;
ageend[i]:=fieldbyname('end_condition').AsInteger;
i:=i+1;
next;
end;
end;
end;
procedure TFrm_TJ.FormDestroy(Sender: TObject);
begin
tj_tablelist.free;
goallist.free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -