程序需要动态添加字段,然后删除再重新添加,
在清除字段的时候使用qryHGCircs.Fields.Clear; 
结果多执行几次后会报错,请问有其他的方法可以解决吗?

解决方案 »

  1.   


    var
      f:TField;
    begin
      f := TField.Create(nil);
      f.FieldName := 'xxx';
      ADOQuery1.Fields.Add(f);
    end;
      

  2.   

    这是添加字段的代码:
    procedure TfmHGCircs.AddFields(DateList: string);
    var
      tmpFloatField: TFloatField;
      tmpStrField: TStringField;
      tmpstr: string;
      i: Integer;
    begin
      qryHGCircs.Close;  qryHGCircs.Fields.Clear;  DBGridEh.Columns.Clear;
      tmpFloatField := TFloatField.Create(qryHGCircs);
      tmpFloatField.FieldName := 'l_fund_id';
      tmpFloatField.Name := 'qryHGCircsl_fund_id';
      tmpFloatField.DisplayWidth := 8;
      tmpFloatField.FieldKind := fkData;
      tmpFloatField.DisplayLabel := '编号';
      tmpFloatField.ReadOnly := False;
      tmpFloatField.DataSet := qryHGCircs;  tmpStrField := TStringField.Create(qryHGCircs);
      tmpStrField.FieldName := 'vc_fund_name';
      tmpStrField.Name := 'qryHGCircsvc_fund_name';
      tmpStrField.FieldKind := fkData;
      tmpStrField.Size := 22;
      tmpStrField.DisplayWidth := 16;
      tmpStrField.DisplayLabel := '名称';
      tmpStrField.DataSet := qryHGCircs;  if Trim(DateList) <> '' then
        for i := 0 to HowMany(DateList, '|') do
        begin
          tmpFloatField := TFloatField.Create(qryHGCircs);
          tmpstr := hsGetCol(DateList, i, '|');
          tmpFloatField.FieldName := 'en_deal_balance_' + tmpstr;
          tmpFloatField.Name := 'qryHGCircs' + tmpFloatField.FieldName;
          tmpFloatField.DisplayWidth := 18;
          tmpFloatField.FieldKind := fkData;
          tmpFloatField.DisplayLabel := tmpstr;
          tmpFloatField.DisplayFormat := '#,##0.00';
          tmpFloatField.ReadOnly := False;
          tmpFloatField.DataSet := qryHGCircs;
        end;  tmpFloatField := TFloatField.Create(qryHGCircs);
      tmpFloatField.FieldName := 'en_total_balance';
      tmpFloatField.Name := 'qryHGCircs' + tmpFloatField.FieldName;
      tmpFloatField.DisplayWidth := 20;
      tmpFloatField.FieldKind := fkData;
      tmpFloatField.DisplayLabel := '汇总';
      tmpFloatField.DisplayFormat := '#,##0.00';
      tmpFloatField.ReadOnly := False;
      tmpFloatField.DataSet := qryHGCircs;
      DBGridEh.Columns.AddAllColumns(True);
      for i := 2 to DBGridEh.Columns.Count - 1 do
        DBGridEh.Columns.Items[i].Footer.ValueType := fvtSum;
    end;
      

  3.   

    日志提示的错误执行qryHGCircs.Fields.Clear;出错Invalid pointer operation2009-09-04 08:50:40: 执行DBGridEh.Columns.Clear;出错Access violation at address 00690920 in module