下面这段代码执行不了,我单步调试了一下,当执行到savedialog.Execute;这句时就进入死循环了,请帮忙看看
procedure Tf_main.N84Click(Sender: TObject);
var database:string;
    savedialog:Tsavedialog;
begin
   with f_data.bkup do
   begin
       close;
       sql.Clear ;
       sql.Add('select dbname from dbnameexchange');
       sql.Add('where name='+''''+trim(statusbar1.Panels[1].text)+'''');
       open;
   end;
   database:=f_data.bkup.fieldbyname('dbname').AsString ; //求出当前数据库的名字,赋给变量database
   savedialog:=Tsavedialog.Create(nil); //创建savedialog对象
   savedialog.Execute;
   savedialog.FileName:=database;
   with f_data.ADOQuery3 do
   begin
       close;
       sql.Clear ;
       sql.Add('BACKUP DATABASE '+database+' TO DISK = ' + QuotedStr(savedialog.FileName + '.BAK'));
       execsql;
   end;
  
end

解决方案 »

  1.   


        savedialog:=Tsavedialog.Create(nil);   
         savedialog.Execute;
        savedialog.FileName:=database; {你这句在这里没什么用,应该放在前面}{修改如下:}
       
        savedialog:=Tsavedialog.Create(nil);   
        savedialog.FileName:=database;
        if savedialog.Execute then  {须要判断是否按下确定按扭}
         ....
      

  2.   

    如果不存在savedialog,楼上的可创建
    使用的时候,下面的是必要的。
    if savedialog.Execute then
    如果以nil身份创建了,最后别忘了free
    最好使用
    try
      SaveDialog := TSaveDialog.Create(nil);
      if SaveDialog.Execute then
      ...
    finally
      SaveDialog.free;
    end;