在Delphi写的程序中,增加功能,数据库备份、还原,在线备份没有问题,可是数据库还原后变为置疑,不能使用了,没有看出了哪里有问题,请高手帮忙看看。
还原的代码如下:
 AdoCnt.Close;   //关闭原来的数据库连接
  if AdoCnt.Connected then  
     AdoCnt.Connected := False ;    ADOBackup.ConnectionString := 'Provider=SQLOLEDB.1;Password='+EDIT5.TEXT+';Persist Security Info=True;User ID='+EDIT4.TEXT+';Initial Catalog=master;Data Source='+Edit3.TEXT+'';
  with ADOBackup do   
    begin
      ADOBackup.Close;
      SQL.Clear ;
      l_sql := 'use master alter database libary set offline WITH ROLLBACK IMMEDIATE ' +
               'restore database libary from disk=' + QuotedStr(Edit2.Text) + ' with REPLACE ' +
               'alter database libary  set online with rollback immediate ' ;
      ADOBackUP.SQL.Text := l_sql;
   
      try
        AdoBackUp.ExecSQL ;       
        ShowMessage('恢复成功!');
      except
        ShowMessage('还原失败!');
      end;
    end;

解决方案 »

  1.   

    在ShowMessage('恢复成功!');报错误 Project 'xxx.exe' raised exception class EDatabaseError with Message 'Missing Connection or ConnectionString'. Process stopped.Use Step or Run to continue.
    这时间有不需要连接数据库,为什么会报这样的错误呢。
      

  2.   

    既然用with ADOBackup do后面的ADOBackup都可以省略自己设断点运行,看看各个属性值是什么,执行到那里了就报错?
      

  3.   

    还是放个adoconnect控件吧,只管连接。
      

  4.   

    给个我的数据备份你看看
    procedure TForm_Back.btn1Click(Sender: TObject);
     var
     backupfilename:string;
      AQry: TADOQuery;
    begin
       AQry := nil;
       backupfilename:=edt1.Text;
      if (edt1.GetTextLen = 0) then
         begin       ShowMessage('请选择备份文件的路径及文件名!');
           exit;
         end;      if FileExists(backupfilename) then
      begin                           //提示已经存在是否覆盖
        if  Application.MessageBox('备份文件已经存在,是否要覆盖该文件??','提示',mb_yesno)=id_no then
           Exit;  end ;
              screen.Cursor :=crhourglass;    //将鼠标的光标设置为繁忙状态,表示当前正在执行  try     AQry:=tadoquery.Create(self);     AQry.Connection:=ADOC_backup;    with AQry do
        begin
          AQry.Close;
          AQry.SQL.Clear;
          AQry.SQL.Add('backup database '+FDatabaseName);
          AQry.SQL.Add(' to disk='+''''+backupfilename+'''');
          AQry.SQL.Add('WITH INIT');
          AQry.ExecSQL;
        end;
        ShowMessage('数据库数据成功备份!');  
      except
        on E1: Exception do
        begin
          screen.Cursor:=crdefault;
          ShowMessage('数据库操作失败!');
        end;  end;
      if AQry <> nil then
        FreeAndNil(AQry);
       end;