请问怎么在程序中动态添加计算字段,小女子刚来,请各位高手帮忙,谢谢.

解决方案 »

  1.   

    ...
    ... procedure ADOCalcFields(DataSet: TDataSet); //定义计算过程
    ...
    ...
            ...
            myado.sql.add(); //你的sql语句
            myado.open;         OldFieldlist:=tstringlist.create;  //得到当前的字段列表
            myado.GetFieldNames(OldFieldlist);
            myado.OnCalcFields:=ADOCalcFields;
            myado.Close;                       //暂时关闭         for i:=0 to OldFieldlist.Count -1 do
             begin                                        
              OldFIELD:= TVariantField.Create(myado);//根据刚才字断列表,手动再生//  成//字段列表;
              OldFIELD.FieldName:=trim(OldFIELDlist.Strings[i]);
              OldFIELD.Name:=myado.Name + 'F'+inttostr(i);
              OldFIELD.FieldKind :=fkdata;
              OldFIELD.Index := i ;
              OldFIELD.DataSet :=myado ;
              OldField.DefaultExpression:='0';
             end;
            MYFIELD:= TfloatField.Create(myado); //建立 计算字段
            MYFIELD.FieldName:='cno';
            Myfield.Displaylabel :='新名字';
            myfield.Name:=myado.Name + MYFIELD.FieldName;
            MYFIELD.Calculated :=TRUE;
            MYFIELD.Index := myado.FieldCount ;
            MYFIELD.DataSet :=myado ;
            myado.FieldDefList.Update;
            myado.Open;  //重新打开 ,这时就有了就算字段了
    啥话也不说了,眼泪哇哇地~~~~
    多多加分吧。
      

  2.   

    myado.OnCalcFields:=ADOCalcFields;
    这个不能通过,是什么意思啊,ADOCalcFields是什么
      

  3.   

    ADOCalcFields是什么
    -----------------------这是计算字段的计算过程啊?
    需要你编写代码的,它在单元里是这样的:procedure TFrm_你的表单.ADOCalcFields(DataSet: TDataSet);
    var ln_ys,ln_bs,ln_ss:real;
    begin
     ...
     ...
    end;
      

  4.   

    你所指的计算过程就是OnCalcFields事件吧.
      

  5.   

    我是写在ADOQuery1的OnCalcFields事件中的,但该事件要怎么才能被解发呀
      

  6.   

    就这句:
     myado.OnCalcFields:=ADOCalcFields;