tchart _实时动态决策分析方案
来源:互联网 发布:mac 如何运行程序 编辑:程序博客网 时间:2024/05/17 06:01
2.实施过程
实例位置:光盘/mr/5/5.5/01
本实例是对商品的销售情况进行实时动态分析,以秒为单位,将商品的销售金额在图表中进行显示,这样,决策者可以更直观的了解最新的商品销售动态。商品销售情况的效果图,如图5.56所示。
图5.56 商品销售情况动态实时分析图
程序窗体相关组件的说明,如表5.34所示。
表5.34 窗体的相关组件
对象名
对象类型
属性
值
Form1
TForm
Caption
商品销售情况
PageControl1
PageControl
ActivePage
TabSheet1、TabSheet2
TabSheet1
TTabSheet
Caption
商品销售动态图表
Chart1
TChart
Align
alClient
TabSheet2
TTabSheet
Caption
商品销售表
DBGrid1
TDBGrid
Align
alClient
Timer1
TTimer
Enabled
False
Interval
300
Timer2
Enabled
False
Interval
1000
下面对本实例的制作过程进行说明。
在窗体创建时,为了避免图表中的数据在发生变化时,改变Y轴的最大数据量,可以设置Y轴的最大值。在运行程序时,如果数据库中的最后一条记录是当天录入的,添加数据的编号则从该记录继续往下排,否则从编号1重新排列。代码如下:
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
TabToDay : String;
begin
ToSum := 59;
Chart1.LeftAxis.Automatic := False; //使Y轴的最大值不自动设置
Chart1.LeftAxis.Maximum := 10000; //设置Y轴的最大值
with Chart1.Series[0] do
for i:=0 to ToSum do //为了能够使数据从右向左进行移动,在图表上显示指定个数的数据
ADDXY(i,0,' ',clred);
for i:=0 to Length(ACommoDityName)-1 do
ACommoDityName[i] := char(65+i);
with DataModule1.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from tb_DistRealTime');
Open;
Last;
end;
DateTimeToString(TodayIs,'YYYYMMDD',date()); //获取系统的当前时间
//获取数据表中最后一条记录的时间
DateTimeToString(TabToDay,'YYYYMMDD',DataModule1.ADOQuery1.fieldByName
('Dist_Date').AsDateTime);
if TodayIs=TabToDay then //判断数据表中的最后一条记录是不是今天输入的记录
ToID := StrToInt(Copy((DataModule1.ADOQuery1.fieldByName('ID').AsString),9,8))+1
else
ToID := 1;
Timer1.Enabled := True;
Timer2.Enabled := True;
ToDate := now();
DBGrid1.DataSource := DataModule1.DataSource1;
end;
因为条件有限,本实例不可能以手动的方式在每秒中添加多个记录,在这里用Timer1组件以随机的方式向数据库里添加数据。代码如下:
procedure TForm1.Timer1Timer(Sender: TObject); //向数据库中添加数据
begin
with DataModule1.ADOQuery2 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from tb_DistRealTime');
Open;
Last;
OToDate := FieldByName('Dist_Date').AsDateTime; //获取数据表中最后一条记录的时间
end;
with DataModule1.ADOQuery1 do
begin
Insert;
FieldByName('ID').AsString := TodayIs+Format('%.8d',[ToID]);
FieldByName('Dist_Name').AsString := ACommoDityName[Random(25)];
FieldByName('Dist_Money').AsFloat := Random(3000);
FieldByName('Dist_Date').AsDateTime := now();
Prior;
end;
NToDate := Now(); //获取当前系统时间
if NToDate<>OToDate then //用来当前数据的最新时间
ToDate := OToDate
else
ToDate := NToDate;
ToID := ToID+1;
end;
用Timer2组件对数据库中同一时间段中商品的销售金额以秒为单位进行汇总,并将结果添加到图表的最后一个记录中,同时删除图表的第一个记录,使图表可以进行动态移动。代码如下:
procedure TForm1.Timer2Timer(Sender: TObject); //实现图表的动态实时效果
var
year,month,day,hour,minute,second,millisecond:word;
begin
DecodeDateTime(ToDate,year,month,day,hour,minute,second,millisecond);
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add(IntToStr(year)+'-'+IntToStr(month)+'-'+IntToStr(day)+' '
+IntToStr(hour)+'时');
//将同一时间的销售金额进行汇总
with DataModule1.ADOQuery3 do
begin
Close;
SQL.Clear;
SQL.Add('select sum(a.Dist_Money) as DMoney from (Select * from tb_DistRealTime
where Dist_Date='+''''+DateTimeToStr(ToDate)+''''+') a');
Open;
end;
//使图表进行动态显示
with Chart1.Series[0] do
begin
Delete(0); //删除图表中X轴上的第一个数据
ToSum := ToSum+1;
//在图表的最后添加一个数据
ADDXY(ToSum,DataModule1.ADOQuery3.fieldByName('Dmoney').AsInteger
,IntToStr(minute)+':'+IntToStr(second),clred);
end;
end;
3.补充说明
用图表对数据进行实时检测时,当数据变化过快时,图表中的数据线将变得十分杂乱,这时,可以将图表的显示速度变慢,在数据表中提取图表在显示时间段内变化的数据值,并按数据的个数对其求平均值,以平均值的形式显示在图表中。
- tchart _实时动态决策分析方案
- 保险公司决策分析系统建设方案
- TChart动态创建(Delphi)
- Tchart 动态添加节点
- Tchart分析报告
- 绝对干货:保险公司决策分析系统建设方案
- Tchart
- tchart
- spark+cassandra实时数据分析方案
- 动态生成TChart,显示矩形图
- 6_动态规划_金明的预算方案
- 案例解析|从数据规划、业务分析到管理决策的数据治理方案
- 【ZedGraph】控件的使用2_动态实时更新图
- 数据挖掘-Iris数据集分析-决策边界_根据花瓣数据绘制(七)
- 决策分析模块
- 支持实时决策的商务智能
- 动态规划_求连续整数的划分方案总数
- 【递归】acm北京买房方案辅助决策
- 仙剑四,我该为谁而哭—写在上海软星解散之后
- Servlet 跟踪Session的几种方式
- 笔记-颜色值1-Named Colours
- 精通java swing开发
- 经典粤语贺年歌
- tchart _实时动态决策分析方案
- 操作系统实验七:保护模式之中断测试实验
- SQL2005 Management Studio 数据导入导出
- 可调数字时钟程序
- 米可可的蓝颜知己。
- 笔记-颜色值2-500+ Colours
- Ubuntu 9.10安装sopcast
- ADO.NET数据库访问使用范例(一)
- 制作Web动画——动画制作工具Flash MX