关于计算的问题(100分)

  • 主题发起人 主题发起人 fshrq1
  • 开始时间 开始时间
F

fshrq1

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库是sqlserver2000,前端是delphi6,Ado连接数据库,
假如表table1的字段(f0~f4是物理字段,total是delphi里建立的计算字段)的数据如下:
f0 f1 f2 f3 f4 total
A 2 3 4 5
B 4 5 6 7
C 6 7 8 9

在delphi6编程时,增加3个Tlabel控件,其caption分别是“A”、“B”和“C”,并增加
3个Tedit是对应3个Tlabe,增加一个Tdbgrid并显示Table1的数据。
如果我在label1(其caption=“A”)的Edit1里写“(f1+f2)/2+(f3+f4)*2”,
在label2(其caption=“B”)的Edit1里写“f1+f2+f3+f4”,
在label3(其caption=“C”)的Edit1里写“f1+f2*2+f3-f4/2”,
那么DBgrid1的计算字段Total会自动计算,如下:
f0 f1 f2 f3 f4 total
A 2 3 4 5 20.5
B 4 5 6 7 22
C 6 7 8 9 23.5

我的问题是如何用delphi编程实现,而且是即时显示计算结果,如果修改字段值(f1~f4)
也能够即时显示计算结果。不能用后台数据来写,因为当前的数据可能没能保存,只是在
缓冲内存里。我想只能是用Oncaculate事件里写,请指教。
 
FatExpression
作者:Gasper Kozak. FatExpression的最新版。
这是一款数学公式计算控件,可自动解析字符串公式进行计算,如(5-3)*10=20。
支持运算符: ,-, *, /, ^ 和 !, 还有Pi哦(学过数学的人都该知道它吧,就是
那个3.1415926...);
支持多重括号;
支持变量运算,可以在OnEvaluate事件中为变量付值。
下載地址:
http://61.132.118.165/soft/delphi/Delphi3/FatExpression101.zip
 
有无唔用第三方控件,只用编程就解决的方法
 
可以参考它的源代码。公式分析不是想象中那么简单。
源代码不是就是你所需要的代码吗?
把代码做成控件只是为了方便重用。那又有何不可呢?
 
http://61.132.118.165/soft/delphi/Delphi3/FatExpression101.zip 下载不了,谁有这方面
的经验请说一说,或谁有做过类似的例子能否给我:fshrq@163.com
 
我也正在想这个问题,想自己做个公式解析器,有时间可以探讨一下!
lld_hz@163.com
 
请不吝指教,很急
 
用google查一下FatExpression,一定能查到的.
 
FatExpression不能出理数据库的数据,还有其它办法吗
 
fastreport 和report machine 都有对数据库字段操作(计算公式输入,结果打印出来)
你下载看看源码
 
用計算字段(建議)或用循環計算。
with table1 do
begin
first;
while not eof do
begin
{加入計算的過程}
Next;
end;
end;
 
是否有人做过此类问题,请多多指教
 
请部您 是否只有A、B、C三种情况,如果是的话,试一试下面的代码:
procedure TForm1.ADOTable1CalcFields(DataSet: TDataSet);
begin
if trim(ADOTable1f0.AsString) ='A' then
ADOTable1total.Value :=(AdoTable1f1.Value +ADOTable1f2.Value)/2+(ADOTable1f3.Value+ADOTable1f4.Value)*2;
if trim(ADOTable1f0.AsString) ='B' then
ADOTable1total.Value :=AdoTable1f1.Value +ADOTable1f2.Value+ADOTable1f3.Value+ADOTable1f4.Value;
if trim(ADOTable1f0.AsString) ='C' then
ADOTable1total.Value :=AdoTable1f1.Value +ADOTable1f2.Value*2+ADOTable1f3.Value-ADOTable1f4.Value/2;
end;

good luck!
 
用sql语句有没有办法,请大家想想
 
你看看这样可以吗:
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.ADD('Updata table1 set total=(f1+f2)/2+(f3+f4)*2 where f0=A');
ADOQuery1.execSQl;
……
 
可不可以用delphi的方法?因为lldhz给我的sql语句是不行的。
 
可以把公式写进数据库,而后用update语句计算,set=后面就是公式
 
接受答案了.
 
后退
顶部