implementation{$R *.dfm}
 var
 temp:tstringlist;procedure TForm1.ComboBox2Change(Sender: TObject);
var
 sql:string;
begin
  sql:='select * from '+combobox2.Text;
  adoquery1.Close;
  adoquery1.SQL.Clear;
  adoquery1.SQL.Add(sql);
  adoquery1.ExecSQL;
  adoquery1.Active:=true;
  temp.clear;
  adoquery1.Fields.GetFieldNames(temp);
  combobox3.Clear;
  combobox3.Items.AddStrings(temp);
  temp.free;
  combobox3.Text:=combobox3.Items[0];
end;
当第一次改变combobox2时,没有出现错误,可是第二改变时就在temp.clear处提示出错,如果去掉这一句则下一句就出错,真搞明白,高手帮忙!谢谢!

解决方案 »

  1.   

    怎么没有人回答呢》应当不是太难啊,只因小弟我初学delphi啊,帮帮我吧,谢谢!
    不会也帮我顶一下,顶者有分!
      

  2.   

    adoquery1.ExecSQL;
      adoquery1.Active:=true;====>
      adoquery1.Open;
      

  3.   

    procedure TForm1.ComboBox2Change(Sender: TObject);
    var
     sql:string;
    begin
      sql:='select * from '+combobox2.Text;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add(sql);
      adoquery1.ExecSQL;
      adoquery1.Active:=true;
      temp := TStringList.create;--加上这个
      temp.clear;
      adoquery1.Fields.GetFieldNames(temp);
      combobox3.Clear;
      combobox3.Items.AddStrings(temp);
      temp.free;
      combobox3.Text:=combobox3.Items[0];
    end;
      

  4.   

    try
      temp := TStringList.Create;
      .
      .
      .
    finally
      temp.free;
    end;
      

  5.   

    rocedure TForm1.ComboBox2Change(Sender: TObject);
    var
     sql:string;
    begin
      sql:='select * from '+combobox2.Text;
      adoquery1.Close;
      adoquery1.SQL.Clear;
      adoquery1.SQL.Add(sql);
      adoquery1.ExecSQL;//觉得用adoquery1.open比较好,下的active就不用了
      adoquery1.Active:=true;
      temp := TStringList.create;
      try
        temp.clear;
        adoquery1.Fields.GetFieldNames(temp);
        combobox3.Clear;
        combobox3.Items.AddStrings(temp);
      finally
        temp.free;
      end;
      combobox3.Text:=combobox3.Items[0];
    end;
      

  6.   

    active 主要有什么用呢!不用它,有时会出错啊!
      

  7.   

    如果有temp.destroy呢,在内存里还有信息吗》和temp.free有什么区别呢!