在DBGRIDEH中已有两列是ADOQUERY 查询出来的.现在动态添加一列,想把前两列相除的数据赋给第三列,结果,因是第三列是动态添加的,无法赋值DBGridEh1.Columns:=DBGridEh1.Columns+1;
DBGridEh1.Columns[3].Title.Caption:='MC'
ADOQUERY.SQL.TEXT:='Select MA,MB FORM TEST';
ADOQuery.open;
到这里表格内可以显示出查询出来MA,MB想把  MA/MB*100+'%',就是比例值赋给第三列..不行,因为是虚拟列,不能用
adoquery.edit;
....
....adoquery.post;这样来实现,,询问有什么别的方法可以实现

解决方案 »

  1.   

    ADOQUERY增加calc列MC,在afterscroll计算:
    if DataSet.FieldByName('MB').AsString<>0 then
    DataSet.FieldByName('MC').AsString:=FloatToStr(100*DataSet.FieldByName('MA').AsFloat/DataSet.FieldByName('MB').AsFloat)+'%';
    else
    DataSet.FieldByName('MC').AsString:='0%';或者,在SQL语句直接计算:
    ADOQUERY.SQL.TEXT:='Select MA,MB,Case When IsNull(MB,0)=0 Then '0%' Else Cast(MA/MB*100 As Varchar(20))+''%'' End as MC FROM TEST';
      

  2.   

    更正一下:是在onCalcFields事件写代码,不是onAfterScroll
      

  3.   

    再问下:   如MA,MB,MC三列是数据表字段,但只是MC列是空的,我想刷新MC列数据MC=MA-MB   同时把结果写入数据库....我想是表格在显示的进修用ADOQUERY.EDIT;
           ....
    .....
    ...
    adoquery.post
    提示缺少刷新的列...如何操作谢谢