try
  with DM.myadoquery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select ' + colVal + ' from mytable');
    Open;
  end;
  except
    Exit;
  end;    //动态为query添加字段
   DM.myotheradoquery.first;
   while not DM.myotheradoquery.eof do
   begin
    DM.myadoquery.Close;
    StrF := TStringField.Create(DM.myadoquery);
    StrF.FieldName := DM.myotheradoquery.FieldByName('name').AsString;
    StrF.Index := DM.myadoquery.FieldCount;
    StrF.DataSet := DM.myadoquery;
    //增加计算字段
    if DM.myotheradoquery.FieldByName('name').AsString = 'me'then  
    begin
      StrF.FieldKind := fkCalculated; 
    end;
  
    DM.myadoquery.FieldDefs.Update;
    DM.myadoquery.Open;
    DM.myotheradoquery.next;
  end;  这是源码,我把计算字段的事件写到了DM.myadoquery的CalcFields事件里。但是我单步调试到CalcFields中的时候。发现sql中取出的值并没有赋给计算字段DataSet.FieldByName('me').AsString的值为空。到底sql取出的结果什么时候发送给计算字段呢?DM.myadoquery.Open;以后?