第一次查询的时候,是可以查询得出来的,第二次按“查询”,会报这个错误Duplicate field name 'F_sampleid'.出错在这段代码,    FieldDefs.update;
    for i:=0 to FieldDefs.Count-1 do
    begin
      FieldDefs.Items[i].CreateField(adoquery1);
    end;
请问应该怎么办呢??
 with adoquery1 do
  begin
  close;
  SQL.Clear;
  if not (s ='') then
  begin
    SQL.Add('select * from rwfp where   ' );
    SQL.Add( s +'order by isnull(f_Urgent,6),f_todate desc');
  end
  else
  begin
      SQL.Add('select *  from rwfp ');
  end;
    
    FieldDefs.update;
    for i:=0 to FieldDefs.Count-1 do
    begin
      FieldDefs.Items[i].CreateField(adoquery1);
    end;    field1:=TstringField.Create(adoquery1);
    with field1 do
    begin
      FieldName:='xm';
      DataSet:=adoquery1;
      DisplayLabel:='项目';
      FieldKind:=fklookup;
    end;    with adoquery2 do
    begin
      Close;
      SQL.Add('select id,xmmc from a_devolve_xm a where exists(select 1 from a_gr_rwfp where xmid=a.id)');
      Open;
    end;    with field1 do
    begin
      KeyFields:='xmid';
      LookupDataSet:=adoquery2;
      LookupCache:=true;
      LookupKeyFields:='id';
      LookupResultField:='xmmc';
    end ;
end;fielddefs动态创建

解决方案 »

  1.   

    提示字段重复了,每次创建的时候先清除下试下:with adoquery1 do
      begin
      close;
      SQL.Clear;
      if not (s ='') then
      begin
        SQL.Add('select * from rwfp where   ' );
        SQL.Add( s +'order by isnull(f_Urgent,6),f_todate desc');
      end
      else
      begin
          SQL.Add('select *  from rwfp ');
      end;
        
        FieldDefs.update;
        ADOQuery1.FieldDefs.Clear;
        for i:=0 to FieldDefs.Count-1 do
        begin
          FieldDefs.Items[i].CreateField(adoquery1);
        end;
      

  2.   

    照楼上的大侠说的,然后提出错误是这个'adoquery1:Field 'xmid' not found'了,而且是第一次查询就出现,请大家再次解惑,不胜感激!!