⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frm_sjtj.pas

📁 用于家庭养殖的财务进出
💻 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 + -