procedure TForm1.Button1Click(Sender: TObject);
var
 adoconnection:Tadoconnection;
 adoquery:Tadoquery;
 mylist:Tstrings;
 i:integer;
begin
  ADOConnection := TADOConnection.Create(nil);
  ADOConnection.LoginPrompt := False;
  ADOConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + FileN + ';Extended Properties=Excel 8.0';
  ADOQuery := TADOQuery.Create(nil);
  mylist:=Tstringlist.create;
  queryds.dataset:=adoquery;
  dbgrid1.DataSource:=queryds;
  ADOQuery.Connection := ADOConnection;
  ADOConnection.GetTableNames(mylist, false);
  for i:=0 to mylist.count-1 do
  begin
   adoquery.close;
   adoquery.SQL.clear;
     ADOQuery.SQL.Text := 'Select * from [' + mylist[i] + ']';
   ADOQuery.Open;
   showmessage(mylist[i]);
  end;
  ADOQuery.Close;
  ADOConnection.Close;
   ADOQuery.Free;
   ADOConnection.Free;
   mylist.free;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
 form1.close;
end;

解决方案 »

  1.   

    procedure TForm1.Button2Click(Sender: TObject);
    begin
      { form1.close;
       把上面一句换掉}
       application.Terminate
    end;
      

  2.   

    问题解决了,谢谢!Drate。但我想问form1.close或form1.destroy为什么不行,改为application.terminate就可以了
      

  3.   

    application.terminate这是结束整个程序,而form1.close只是关闭一个窗体而已
      

  4.   

    不要用terminate,这不符合Delphi的精神。
    如果需要关闭该窗体,应该在窗体的OnClose事件中加上这么一句话:
    procedure TForm1.OnClose(Sender:TObject;var Action:TCloseAction);
    begin
      Action := crFree ;
    end;
    因为Delphi窗体缺省的行为是crHide,即隐藏,所以需要改变其缺省行为。
      

  5.   

    实现了OnClose事件后,就可以调用Close方法来关闭窗体。