如何不用“计算字段”对象,而怎么实现我的计算功能?(50分)

  • 主题发起人 主题发起人 xhqing
  • 开始时间 开始时间
X

xhqing

Unregistered / Unconfirmed
GUEST, unregistred user!
如何不用“计算字段”对象,而怎么实现我的计算功能?

初学Delphi,我现在正需做好一个小程序,用的是Delphi 7+ Access 2002数据库,该数据库有9个表,我想用一个ADOQuery、一个DBGrid来完成对表的数据加工与显示,我是想在运行期连接数据库,而且在运行期临时生成查询的SQL字符串完成查询,所以无法在字段编辑器里做“计算字段”,提示:“验证失败”,而我要用“计算字段”完成有关计算。
如果不在运行期生成查询的SQL字符串,那要用到很多个ADOQuery,以致影响诸如保存、插入、删除等操作代码很是复杂。
我现在不知道如何脱离“计算字段”对象不用它,而怎么实现我的计算功能。
如果用SQL的UPDATE命令,那会或者要频繁地更新整个表的所有记录或者要另设按钮每次手动地更新需计算的数据。
我现在尝试在DBGrid1的KeyDown事件中加:
if key=#13 then
if DBGrid1.SeletedField.FieldName=’c2’ then
ADOQuery1.FieldByName(‘c3’).Value=ADOQuery1.FieldByName(‘c1’).Value / ADOQuery1.FieldByName(‘c2’).Value,可是提示:数据集不在“编辑”或“插入”状态。
把这段代码加在ADOQuery1的AfterPost事件中也不行。
1、请问像我这个程序,整的设计模式该是怎样的才是最好最科学的、省事的,是用一个ADOQuery、一个DBGrid,还是用多个ADOQuery、一个DBGrid。
2、请问如何脱离“计算字段”对象不用它,而怎么实现我的计算功能。还是能不能在运行期动态地生成“计算字段”?
3、另外,听说用中文字段会引起程序的不稳定,是否是这样的,我没经验,也没测试过。
敬请哪位热心的耐心的高人、朋友指点,在此先十分感谢您!
 
用嵌套查询
(select sum(金额) from 表 ) as 字段
 
我是想不用“计算字段”对象,而怎么实现计算功能:
是同一行----同一记录的关系:第三字段的值=第一字段值÷第二字段值,而不是统计一列数据之总和,请高人指教!
"(select sum(金额) from 表 ) as 字段" 中的"as 字段"
会产生新的字段吗,我要用原来在Access中定义的字段,该怎么写?
敬请高人指导!
 
实现这个计算功能的语句应加在什么对象(ADOQuery1、DBGrid1、DataSource1)的什么事件中?
 
一个ADOQuery、一个DBGrid也可以。
 
ADOQuery1:DataSet not in edit or insert mode.
可能是用的打开方式不对
 
把你要计算的代码放在
beforePost事件中,就可以了.
在你的代码前再加一句吧:
adoquery1.Edit ;
 
我按qnaqbgss的指导把
ADOQuery1.FieldByName(‘Field_3’).Value=ADOQuery1.FieldByName(‘Field_1’).Value / ADOQuery1.FieldByName(‘Field_2’).Value,
放在beforePost事件中,就可以实现计算功能了.非常感谢!可是我不知道如何设置计算结果的显示格式:
我用ADOQuery1.FieldByName('Field_3').Value:=FormatFloat('##0.00',ADOQuery1.FieldValues['Field_3']);或
ADOQuery1.FieldByName('Field_3').displayformat:='##0.00';不能实现,我查了一下数据集的字段对象好象没有displayformat属性,仅仅用"字段编辑器"生成的字段才有此属性。
因为我的数据表是动态生成的,我是想一年用一个表保存,比如明年的表是临时创建的,这样主要是考虑用户在输入数据时较方便,所以我只有在程序中用代码动态设置某一字段的数据显示格式.

我不知怎么办,上网查了一下,也无结果,问题虽然简单,还请大侠们不吝赐教!谢谢你们的关心和指导!
 
qnaqbgss说的正确,我按他的做法实现了计算功能
 
后退
顶部