自定义的一个计算函数如下:
function Txsthd.re_calc:boolean;
var dd:double;
begin
   with  ADOQuery2 do
   begin
      dd:=FieldByName('S1').AsFloat + FieldByName('S2').AsFloat + FieldByName('S3').AsFloat + FieldByName('S4').AsFloat + FieldByName('S5').AsFloat + FieldByName('S6').AsFloat + FieldByName('S7').AsFloat + FieldByName('S8').AsFloat + FieldByName('S9').AsFloat + FieldByName('S10').AsFloat;
       if dd <> 0 then
       FieldByName('HJSL').value := dd;
       FieldByName('je').Value:=strtofloat(formatfloat('0.##',FieldByName('HJSL').Value*FieldByName('dj').Value));
       dd:=FieldByName('zk').Value;
       FieldByName('zkdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,dd*FieldByName('dj').Value));
       FieldByName('zkje').Value:=strtofloat(formatfloat('0.##',FieldByName('HJSL').Value*FieldByName('zkdj').Value));
       FieldByName('sj').Value:=strtofloat(formatfloat('0.##',(FieldByName('sll').Value/100)*FieldByName('zkje').Value));
       FieldByName('hsje').Value:=FieldByName('sj').Value+FieldByName('zkje').Value;
       dd:=FieldByName('sll').Value;
       FieldByName('hsdj').Value:=strtofloat(formatfloat(SYS_DJXS_FORMAT,(dd/100)*FieldByName('zkdj').Value))+FieldByName('zkdj').Value;
       //辅助数量
       if FieldByName('HJSL').Value=0 then
          FieldByName('fzsl').Value:=0
       else
          FieldByName('fzsl').Value:=strtofloat(formatfloat(SYS_DWRATIONXS_FORMAT,(FieldByName('sl').Value)/FieldByName('dunitratio').Value));
   end;
   result:=true;
end;调用时在S1、S2、S3、S4、S5、S6、S7、S8、S9、S10字段onupdatedata事件中均已调用re_calc,但出现HJSL的值不等于S1、S2、S3、S4、S5、S6、S7、S8、S9、S10之和。经过跟踪调试发现第一次按下的数量回车后HJSL能取到正确的值,但接着按第二个、第三个、第四个、。。发现最终得数取得的值不含最后一数。即如果分别在S1、S2、S3、S4、S5、S6、S7、S8、S9、S10字段输入的是1、2、3、4、5、6、7、8、9、10的话HJSL取得的值为45,希望有经验的前辈能指点一下,谢谢!

解决方案 »

  1.   

    这时如果重新将光标指向10重新输入10按回车HJSL=55 正确结果我想知道的是为什么最后输入的那个没办法即时更新出来?
      

  2.   

    你这个是要修改字段内容吧,我没有看到edit和post。还有几个自己找找吧。
    edit;
    FieldByName('HJSL').value := dd;
    post;
      

  3.   


    谢谢你的回答,不过我已找到解决办法。现说出来分享吧。
    出现以上问题,可以在调用时转为EDIT后重处理。