内容 | ||
8.1 基础 前言 在设计时连接到数据源 在运行时连接到数据源 | 8.2 扩展功能 单记录 摘要分组数据 | 8.3 事件 The OnProcessRecord事件 |
8.1 基础
8.1.1 前言
在设计时使用图表编辑器,和在运行时使用几行代码,可以在将一个TeeChart控件连接到数据库。您应该使用TDBChart组件,正如名称所暗示的那样,这个TeeChart组件支持数据访问。TDBChart安装在组件面板的Data Controls(数据控制)部分上。TDBChart继承了所有TChart属性和方法,关键的区别在于,它还包含了对Borland's Database Engine(Borland的数据库引擎<BDE>)的访问,从而增加了使用该组件编译的工程的大小。出于这个原因,我们建议您使用TChart组件,除非您希望直接连接到数据源。
TeeChart连接到所有Borland的TData组件,包括TTable、TQuery和TClientDataset。当连接到Tables(表)或Queries(查询)时,不需要使用TDataset组件,因为TeeChart将直接连接。
任何序列都可以使用图表编辑器连接到表或查询。每个序列都可以被连接到相同或不同的数据库中的相同或不同的表或查询。
这种设计为您提供了如何将图表连接到数据库的完全灵活性,因为您不会被仅局限于一个数据库,也不会被仅局限于一个表或查询。
在设计时也会检索数据,这样您就可以在开发期间看到实际的数据。
8.1.2 在设计时连接到TData组件
下面的步骤假设您已经在窗体上放置了一个TTable、TQuery或TClientDataset。在本例中,您可以将TTable连接到TeeChart ProDatabase,在安装TeeChart Pro和选择Employee表时,它已被安装为一个ODBC v3 DSN。
在设计时,将一个序列连接到一个数据源所需的步骤是:
1. 在表单上放置一个TDBChart控件
2. 双击TDBChart控件以显示图表编辑器
3. 向图表控件添加一个系列(例如一个Bar系列)
4. 单击“Series(序列)”选项卡和“DataSource”选项卡
5. 现在点击组合框并选择“Dataset(数据集)”
在这一点上,你将看到这个屏幕:
6.选择“Dataset(数据集)…”组合框来展示了一份可用的数据源列表:
通过从组合框中选择一个项目,您可以将该序列连接到指定的表或查询。
- 7.在本例中,我们将Table1连接到“TeeChart Pro Database”和“Employee”表,如上图所示。
现在您应该定义从表或查询中检索哪些字段,并将其添加到该序列。这是用图表编辑器来完成的,通过为每个序列部分选择适当的字段。
- 8.请看下面的图像,使用我们的示例选定的字段,展示图表编辑器的DataSource选项卡。
每个序列都有一个“Label”字段(应该是“String”或“Char”类型),以及一个值字段(用于Bar序列的“Bar”字段),该字段应该是整数、浮点类型或日期-时间字段类型。
在本例中,我们从“Employee”表中选择了“LASTNAME”字段作为序列标签,并将“SALARY”数值字段作为Bar点的值。
请参见上面图片中的DataSet(数据集)组合框。这个组合框显示了您创建的可用的表或查询。你总是可以来到这个对话框,选择一个不同的数据集,或者通过点击“Edit(编辑)...”按钮来编辑它。
现在我们已经指定了适当的字段,是查看结果的时候了。
- 9.单击“Close(关闭)”按钮关闭图表编辑器并返回到编程环境。
此时,TChart控件将尝试打开所选的数据源数据库表或查询,并将开始检索记录,并向所选的序列添加值。
在我们的示例中,您将在设计时看到以下图表:
现在,如果您运行该工程,图表将从Datasource中检索所有记录,并将为该序列添加值。您将看到与在运行工程之前的设计时相同的图表。
- 10.运行应用程序。
请参阅“Examples”文件夹下包含DB的示例。
8.1.3 在运行时连接到数据库
上面的设计时步骤可以通过使用少量的代码以编程的方式复制。这就给了您更多的自由和对数据库操作的控制。
在新工程和新窗体上重复前3个步骤。
上面的设计时步骤可以通过使用少量的代码以编程的方式复制。这就给了您更多的自由和对数据库操作的控制。
在新工程和新窗体上重复前3个步骤。
每个序列都有 DataSource(数据源) 属性,它确定数据库值(表或查询)的原始值,以及“Yvalues.ValueSource”和 “LabelsSource” 的属性,来指定我们想要绘制的字段。
LabelsSource和Yvalues.ValueSource属性的语法是:
Series1.YValues.ValueSource := 'SALARY'; Series1.XLabelsSource := 'LASTNAME';
而序列DataSource的语法是:
Series1.DataSource := Table1; //或者是 Series1.DataSource := Query1;
建议您按该顺序设置上述属性。首先设置 XLabelsSource 和 YValues.ValueSource 然后是DataSource属性。
如果数据库值被更改,您想要“刷新”连接并再次检索值,您应该这样做:
Series1.CheckDataSource;
CheckDataSource 方法将强制该序列再次检索所有记录。
所有序列都有“Xvalues.ValueSource”属性。这个属性只用于XY图表(当每个点有一个X坐标时)。
如果TeeChart不能找到您指定的数据源,或不能打开表或SQL查询,那么将会出现一个错误。记住要将Datasource设置为“Active”。
8.2 扩展功能
8.2.1 单一记录
单一记录数据图表允许从数据源记录中水平地检索数据。从TeeChart编辑器Datasource组合框中选择“Single Record(单一记录)”选项。
示例:
上面的定义从TeeChart的示例Stock表中获取了第一个记录,并将开盘、最高、最低和收盘的值作为一个序列的不同点绘制出来。
8.2.2 摘要分组数据
通过TeeChart的数据集获取的数据可以根据数据集的不同字段来分组,从而根据所选字段创建Summary(摘要)。从TeeChart图表编辑器Datasource 组合框中选择“Summary(摘要)”
示例:
上面的选择是画一个delphic++Builder的“Orders”表“AmountPaid”字段的条形图(Bar Series),由客户编号“CustNo”来分组结果。
如果数据集包含一个datetime字段,那么您可以从第一个“Group by”组合框中选择分组标准作为DateTimeStep。下面的小组使用“Saledate”来平均“AmountPaid”的每个季度的收入。
示例:
上面的代码如下:
With Series1 do Begin DataSource:=Table1; YValues.ValueSource:='#AVG#AmountPaid'; XLabelsSource:='#QUARTER#SaleDate'; end;
8.3 事件
8.3.1 The OnProcessRecord 事件
TChart控件提供一个事件,每当检索到一个记录并添加到一个序列时,就会调用该事件。
这个事件就是“OnProcessRecord”,并具有以下语法:
procedure TForm1.DBChart1ProcessRecord(Sender: TCustomDBChart; DataSet: TDataSet); begin end;
您可以使用此事件产生一个静默中止来停止检索数据。
请查看Examples文件夹中包含的“DB”的示例。