一个令人困惑的计算问题(100分)

X

xiehong

Unregistered / Unconfirmed
GUEST, unregistred user!
一个数据库中有三个字段,其中两个为数据库中的物理字段A1,A2,一个为计算字段Total,
我要达到这样的效果:计算字段Total的值等于其中的一个物理字段A1与Edit控件中的数值
相乘再除以100,然后再加上另一个物理字段A2,可是总是达不到预期的效果,计算字段
Total的值总是等于A2,不知是何原因?我的代码如下:

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
if edit4.text='' then
begin
edit4.text:='0';
end;
if edit5.text='' then
begin
edit5.text:='0';
end;
table1total.value:=table1A1.value*StrToFloat(edit5.text)/100+table1A2.value;
end;
 
你调试以下呀,一步步看,那些值与你想的有差别?
edit5.text会为0吗?
从你的出错看来,可能是edit5.text总等于0
 
你的计算过程是放在Table1CalcFields事件中的,这此时EDIT5.TXT总为0,因为此时你还没
输入数据,你可以试着在EDIT5的CHANGE事件中调用一下上面的计算过程看看。
 
可是我的edit5中明明是输入了数据的呀!
 
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
if length(edit4.text)=0 then
begin
edit4.text:='0';
end;
if length(edit5.text)=0 then
begin
edit5.text:='0';
end;
table1total.value:=table1A1.value*StrToFloat(edit5.text)/100+table1A2.value;
end;
 
应该将计算代码放在字段Total的ongettext事件中。
 
to thinknet:
使用你的方法可以得到计算结果,可是这样做的话,我的计算字段就得不到计算结果了,
因为edit5控件中是不经常输入数值的(只是偶尔),那样的话是不行的。
可是有没有其它的方法呢?
 
必须在编辑框中输入值后,将表或查询关闭后重新打开!!!
 
试了一下weizi的方法,还是不行,不知道我的使用方法对不对:
procedure TForm1.Table1totalGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if edit4.text='' then
begin
edit4.text:='0';
end;
if edit5.text='' then
begin
edit5.text:='0';
end;
table1total.value:=table1JNGZ.value*StrToFloat(edit5.text)/100+table1gwgz.value;
end;
 
cxrcg的方法也不行
 
请你在调试的时候看看当你执行求和代码时edit5.text的值是否等于0,如果这是等于0则可能
是因为你输入edit5时,edit5的值尚未提交(某些控件值可能要焦点改变时才会提交的!),
这时可以将其他edit获得焦点,这时再进行求和操作。。。希望对你有帮助
 
应该是开始激活表后edit5的值被设定为0,而后数据edit5中被改变了
计算,计算列没有刷新,所以总是A2的值
计算时候刷新就可以了
 
xiehong,我是厦门的程序员,认识一下?ok?
QQ:1002575
Email:crc@esuntec.com
msn: iamwpc@hotmail.com
 

Similar threads

顶部