GRID中关于计算字段的问题(50分)

  • 主题发起人 主题发起人 hnzqw
  • 开始时间 开始时间
H

hnzqw

Unregistered / Unconfirmed
GUEST, unregistred user!
GRID中显示如下:
日期 数量 天数(天数为计算字段,等于date-日期)
01-10-1 10 7
01-9-10 20 27
01-9-1 40 37
... ... ...
[?] 当计录中数量累计值(从第1个记录开始)大于30时 不计算天数。反之,计算天数
结果如下:

日期 数量 天数(天数为计算字段,等于date-日期)
01-10-1 10 7 (数量累计为:10,计算天数)
01-9-10 20 27 (数量累计为:30,计算天数)
01-9-1 40 (数量累计为:70,不计算天数)
... ... ...
请教好的方案

 
用SQL解决
你是什么数据库?
 
很简单,在dataset的fields中加入一个计算字段,然后在dataset的oncalcfields事件中算出
来,赋给这个计算字段就行了。祝你成功。
 
用计算字段
 
对,加个计算字段!
 
双击Query1, 在弹出的对话框中点右键,点add fields,
用两个字段, 旧天数和实际显示的天数字段, 后者是计算字段
可以在SQL语句中写select ....., 天数, 天数 as 实际天数 ....from
选 实际天数 字段-----然后选中field type中的caculaded-----ok.

在Query1的onCalcFields编码即可,
if query1.fieldByName('实际天数').Value <30 then
query1.fieldByName('实际天数').Value := 0;



 
我用的是ACCESS数据库。且天数字段定义为计算字段。 OnCalcFields中如下:
procedure THKCX_Form.ADOQuery2CalcFields(DataSet: TDataSet);
begin
adoquery2.FieldByName('QHQS').asinteger:=(date-adoquery2['日期']);
end;
但现在想让计算出的天数字段值根据数量累加值来确定是否显示。
我 在上面的OnCalcFields事件中加一个变量,来计算累计天数值,如下:
procedure THKCX_Form.ADOQuery2CalcFields(DataSet: TDataSet);
var
SLLJ:integer;
begin
SLLJ:=SLLJ+adoquery2['数量'];
//上行在运行时出错,跟踪发现sllJ初始值为大于20000的值,
//但在此事件中,不能给SLLJ赋初值0。在VAR中定义SLLJ:integer=0;也提示不能赋值。
//后有定义一个全局变量,在窗口CREAT事件中赋初值,但在此事件中,sllj初始值为0,但
//在计算时又不正确了。
if sllj<30 then
adoquery2.FieldByName('QHQS').asinteger:=(date-adoquery2['日期']);
end;
楼上几位说加计算字段,我已加了计算天数的计算字段。
htw可能没看清,我需要的是根据数量的累计值来确定天数的计算值或先全部计算但最后显示
的实际天数是按数量累计值来确定的。

 
[blue][/blue]难道就没有能答
 
同意htw的。
 
你可以先添加计算字段
然后在Fields Editor里添加‘天数’这个字段
然后在天数这个Field控件的OnGetText事件上添加
if 数量字段名称.Value>30 then
text=''
else
text:=天数字段名称.Asstring;
 
在Oncalcfields可对计算字段赋值,在其他函数中给计算字段赋值不上,请问是何原因???
用的是ADOQuery控件。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
916
SUNSTONE的Delphi笔记
S
后退
顶部