p> 在很多情况下,我们需要的数据与数据库中其它字段的数据相关,例如订单的金额为数量与单价的乘积。在应用程序中,若要在显示订单具体条目的同时显示金额,通常要创建一个字段,在显示该字段之前先进行乘法运算,将金额值存储在该字段中。但是,若用户修改了数量或单价,那就不得不更改金额值。这个问题立刻变得复杂起来,幸好delphi提供了在数据库表中定义附加字段的容易方法。这种字段被称为计算出的字段(calculatedfields),它们以数据库表中的其他字段为基础。计算出的字段的优点是计算出的值不被存储在数据库中,不过,每次记录发生变化时都要对其进行计算,且需要访问和显示字段。下面说明使用计算出的字段的方法。
1. 建立新的工程文件project1, 在form1上放置一个table、一个datasource和一个dbgrid 控件,datasource1的datasource 属性为table1,dbgrid1的datasource属性为datasource1。table1中所用的数据库表为order.db,将table1的active属性置为true。 下面是table1的定义:
|
字段名
|
类型
|
说明字段含义
|
|
productid
|
+产品
|
编号
|
|
quantity
|
n
|
数量
|
|
price
|
$
|
单价
|
2. 添加计算出的字段cash。用鼠标右键单击table1组件,在弹出菜单中选取fieldseditor…项,进入字段编辑器;再用鼠标右键单击字段编辑器的字段显示区? 在弹出菜单中选取add fields…项,将table1的所有字段都加入字段编辑器中;再次用鼠标右键单击字段编辑器的字段显示区域,在弹出菜单中选取new field…项,进入新字段编辑器,设新字段的name为cash,type为currency,fieldtype为calculated,用鼠标单击ok命令按钮,即完成了添加计算出的字段cash。
3 .添加table1的oncalcfields事件。其代码为:
proceduretform1.table1calcfields(dataset: tdataset);
var
quantity1:single;
price1:currency;
begin
quantity1:=table1.fieldbyname(quantity).asfloat;
//数量
price1:=table1.fieldbyname(price).ascurrency;
//单价
table1.fieldbyname(cash).ascurrency:=quantity1*price1;
//应付资金
end;
运行程序,你可以在表格的quantity 和price栏中任意修改数据并移动记录,cash栏即刻显示出与 之相应的金额值。