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;以后?
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;以后?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货