[错误] Unit1.pas(127): Undeclared identifier: 'SaveDialog1'
  [错误] Unit1.pas(127): Missing operator or semicolon
  [错误] Unit1.pas(129): Missing operator or semicolon
  [错误] Unit1.pas(131): 'THEN' expected but identifier 'Execute' found
  [致命错误] Project1.dpr(5): Could not compile used unit 'Unit1.pas'代码:unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, ADODB, StdCtrls, DBTables, ComObj;type
  TForm1 = class(TForm)
    ADOConnection1: TADOConnection;
    DBGrid1: TDBGrid;
    Button1: TButton;
    DataSource1: TDataSource;
    Button2: TButton;
    ADOQuery1: TADOQuery;
    Button3: TButton;
    SaveDialog1: TSaveDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }  end;
  function ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean;
var
  Form1: TForm1;implementation
  
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
beginADOConnection1.Connected := True;
ADOConnection1.Execute('Select * Into 21 From [Text;Database=e:\].a.txt');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
   DBGrid1.DataSource:=DataSource1;
   DataSource1.DataSet:=ADOQuery1;
   ADOQuery1.Connection:=ADOConnection1;
   ADOQuery1.Close;
   
   ADOquery1.Sql.Text := 'SELECT * from sp';
    ADOquery1.Open;
end;function ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean;
varc, r, i, j: integer;app: Olevariant;TempFileName, ResultFileName: string;begintry    result := True;      app := CreateOLEObject('Excel.application');    // app.WorkBooks.Add(xlWBatWorkSheet);       except      Application.MessageBox('Excel没有正确安装!','警告',MB_OK);      result := False;      exit;    end;    SaveDialog1.DefaultExt := 'xls';    SaveDialog1.FileName := SheetName;    if SaveDialog1.Execute then      TempFileName := SaveDialog1.FileName    else      Exit;    app.Workbooks.add;    app.Visible := false;    Screen.Cursor := crHourGlass;    DBGrid.DataSource.DataSet.First;    c := DBGrid.DataSource.DataSet.FieldCount;    r := DBGrid.DataSource.DataSet.RecordCount;    Application.ProcessMessages;    for i := 0 to c - 1 do      app.cells(1, 1 + i) := DBGrid.DataSource.DataSet.Fields[i].DisplayLabel;    for j := 1 to r do    begin      for i := 0 to c - 1 do        app.cells(j + 1, 1 + i) := DBGrid.DataSource.DataSet.Fields[i].AsString;      DBGrid.DataSource.DataSet.Next;    end;       ResultFileName := TempFileName;    if ResultFileName = '' then      ResultFileName := '数据导出';    if FileExists(TempFileName) then     DeleteFile(TempFileName);    app.Activeworkbook.saveas(TempFileName);    app.Activeworkbook.close(false);    app.quit;    app := unassigned;end;end.

解决方案 »

  1.   

    没有定义SaveDialog1,拖个控件上去,或者直接定义一下。。
    其他的错误都是语法错误,自己再看一下吧
      

  2.   

    在Dialogs面板上,放一个SaveDialog
      

  3.   

    樓上的兩位沒看到LZ已經在窗體上放了這個SaveDialog1控件嗎TForm1 = class(TForm) 
        ADOConnection1: TADOConnection; 
        DBGrid1: TDBGrid; 
        Button1: TButton; 
        DataSource1: TDataSource; 
        Button2: TButton; 
        ADOQuery1: TADOQuery; 
        Button3: TButton; 
        SaveDialog1: TSaveDialog; 
        procedure Button1Click(Sender: TObject); 
        procedure Button2Click(Sender: TObject);   
      

  4.   

    LZ,我看了你的代碼,應該是你function ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean; 
    這個函數定義的位置有問題,它根本不在窗體的類之內,所以它也就無法訪問savedialog1這個控件,所以才會報這個錯。你把這個函數定義在窗體的public或是private裏面吧
      

  5.   

    楼上说的不错~~
    可以不用静态组件,直接动态创建,不过记得函数最后释放动态创建的组件~~
    function ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean; 
    var 
    c, r, i, j: integer; 
    app: Olevariant; 
    TempFileName, ResultFileName: string; 
    SaveDialog1: TSaveDialog; 
    begin
      savedialog1:=tsavedialog.Create(self);
      代码
       savedialog1.free;
    end;
      

  6.   

    savedialog1是这个form的一个属性,
    外部方法怎么可能跨过类直接访问?外部方法里var一个变量好了,create一次
      

  7.   


    多谢了,问题解决了
    function TForm1.ExportDBGrid(DBGrid: TDBGrid; SheetName: string): boolean;
    这样就可以了,晕菜