各位大虾,小弟现在要在程序中实现数据库的备份和恢复,请问如何实现呀。我现在找到了一个关于数据库备份的源代码,已经试验成功。即使用SQL语句
'BACKUP DATABASE databasename TO DISK = ''' + strPathName + Vartostr(FormatDateTime('yyyy-mm-d_hh_mm', now)) + '.bak'''
请问如何实现数据库的恢复,请各位大虾赐教!多谢了!

解决方案 »

  1.   

    可以用另外一个adoquery连接到系统数据库(master),然后用这个组件使用恢复用的sql语句就行了!
      

  2.   

    然后用这个组件执行恢复用的sql语句就行了!
      

  3.   

    S:='RESTORE DATABASE ['+DBName+
               '] FROM  DISK = N'''+filename+'''  WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY ,  REPLACE ';
            for I:=0 to Application.ComponentCount-1 do
            Begin
              if Components[I] is TAdoDataSet then
                TAdoDataSet(Components[I]).Close;
              if Components[I] is TADOQuery then
                TADOQuery(Components[I]).Close;
              if Components[I] is TADOTable then
                TADOTable(Components[I]).Close;
            end;
            ADOConnection1.Close;
            ADOConnection1.ConnectionString:='Provider=SQLOLEDB.1;Password='
                                            +G_DBServerPsw+';Persist Security Info=True;User ID='
                                            +G_DBServerUser+';Initial Catalog=master;Data Source='
                                            +G_ComputerName;
            ADOConnection1.Connected:=True;
            ADOQuery1.Close;
            ADOQuery1.SQL.Clear ;
            ADOQuery1.SQL.Add('sp_who');
            ADOQuery1.Open ;
            ADOQuery1.Filter :='dbname='''+AccountVar.DataBaseName+''' ';
            ADOQuery1.Filtered :=true;
            ADOQuery1.First ;
            while not ADOQuery1.Eof do
            begin
              ADOCommand1.CommandText:='kill '+ADOQuery1.FieldByName('spid').AsString;
              try     //使用错误处理是因为在kill时链接可能已经断开了
                ADOCommand1.Execute ;   //kill 其它连接
              except
              end;
              ADOQuery1.Next ;
            end;
            ADOQuery1.Close ;
            ADOQuery1.SQL.Clear ;
            ADOQuery1.SQL.Add(S);//restore语句
            try
              Screen.Cursor:=crSQLWait;
              ADOQuery1.ExecSQL ;
              MessageBox(Handle,'恢复成功!','信息',MB_OK+MB_ICONINFORMATION);
            finally
              Screen.Cursor:=crDefault;
              G_CloseDirect:=True;
            end;