一个奇怪的dbgridEH求和函数调用问题

想到才能做到 2011-08-02 09:02:35
自定义的一个计算函数如下:
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,

希望有经验的前辈能指点一下,谢谢!
...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
尤里二世 2011-08-04
  • 打赏
  • 举报
回复
來學習的
想到才能做到 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 babydog01 的回复:]
你这个是要修改字段内容吧,我没有看到edit和post。还有几个自己找找吧。
edit;
FieldByName('HJSL').value := dd;
post;
[/Quote]

谢谢你的回答,不过我已找到解决办法。现说出来分享吧。
出现以上问题,可以在调用时转为EDIT后重处理。
babydog01 2011-08-03
  • 打赏
  • 举报
回复
你这个是要修改字段内容吧,我没有看到edit和post。还有几个自己找找吧。
edit;
FieldByName('HJSL').value := dd;
post;
想到才能做到 2011-08-02
  • 打赏
  • 举报
回复
这时如果重新将光标指向10重新输入10按回车HJSL=55 正确结果

我想知道的是为什么最后输入的那个没办法即时更新出来?

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧