1.我在adoq_gz上新加了一个工资额(gz_gze)字段
2.在adoq_gz的oncalcfields事件加了如下代码
procedure tf_gz.adoq_gzcalcfields(dataset:tdataset);
begin//以下所示为工资额=基本底薪/208*工作时数
  adoq_gz.fieldbyname('gz_gze').value:=(adoq_gz.fieldbyname('gz_basegz').value)/ 208 * (adoq_gz.fieldbyname('workhours')) 
end;
3.在f_gz的create事件中加入以下代码
  adoq_gz.oncalefields:=adoq_gzcalcfields;
我在dbgrid中先输入基本底薪,再输入工作时数,按回车,就应该有工资额出来。可是什么反应都没有。请各位高手帮忙。

解决方案 »

  1.   

    上面应该编译不过啊,最后少了一个.value.
    建议将所有的.value改成.asfloat试试
      

  2.   

    我的这三个类型都是int型的。改成asfloat之后,都不行。
      

  3.   

    你在参数里的DataSet是干什么用的?为什么在函数里没有出现?
      

  4.   

    adoq_gz.fieldbyname('gz_gze').AsFloat:=(adoq_gz.fieldbyname('gz_basegz').AsInteger)/ 208 * (adoq_gz.fieldbyname('workhours').AsInteger)
    //try!!
    建议不要用Value来搞这样会降低效率。
    我觉得可能是你没有把这个字段显示出来或者显示错了,要么就是你的数据集感知控件没有正确的连接。
      

  5.   

    大哥,我用了你以上的方法还是不行。没有错误提示。只是在dbgrid输入完工资底薪和工作时数后敲回车还是没反应。你说要怎样显示出来呢?
      

  6.   

    在ADOQuery1控件鼠标右击,在fields editer中 添加 all fields
    这时你的ADOQuery的所有字段都显示出来了
    这是在添加new field
    例如:实发字段
    然后在ADOQuery1控件的onCalcFields事件中加入你的代码
    使new的值满足你的要求/*代码*/
    table也是一样
      

  7.   

    步骤应该没错,你可能需要检查一下你的字段有没有输入错误。我看到你的字段一个是工资额(gz_gze),一个是基本底薪(gz_basegz).一个是工作时数(workhours),你看一下和你数据库的对不对。