Delphi里SQL语句如何实现数据库的备份与恢复?

40 | 问答知识库用户 |浏览265次
收藏|2014/05/17 22:00
怎么样写数据的备份还原的SQL语句呢?

满意回答

2014/05/21 22:05

备份:   
procedure TBackupFrm.BitBtn2Click(Sender: TObject);   
begin   
if Edit1.Text= ' then   
begin   
Showmessage('无选择要保存的文件名');   
exit;   
end;   
try  
try  
dmData.adoQryTmp.Active:= false;   
dmData.adoQryTmp.SQL.Clear;   
dmData.adoQryTmp.SQL.Add('BACKUP DATABASE [dzyl] TO DISK = ''+edit1.text+'' WITH INIT');   
dmData.adoQryTmp.ExecSQL;   
finally   
begin   
dmData.adoQryTmp.Active:= false;   
Showmessage('数据库备份成功!');   
end;   
end;   
except   
on e:exception do  
begin   
ShowMessage('数据库备份失败!');   
end;   
end;   
end;   
---------------------------   
恢复   
procedure TBackupFrm.BitBtn4Click(Sender: TObject);   
begin   
  if Edit2.Text = ' then   
  begin   
    showmessage('未选择要恢复的数据库文件!');   
    exit;   
  end;   
  with dmData do  
  begin   
    try  
      adocmmd.CommandText:='use master';   
      adocmmd.Execute;   
      adocmmd.CommandText:='alter database dzyl set offline with rollback immediate';   
      adocmmd.Execute;   
      adocmmd.CommandText:='restore database dzyl from disk= ''+edit2.Text+'' with    
  
recovery ';   
      adocmmd.Execute;   
      adocmmd.CommandText:=' alter database dzyl set online with rollback immediate';   
      adocmmd.Execute;   
      showmessage('数据库恢复成功!');   
      application.Terminate;   
    except   
      on e:exception do  
      begin   
        showmessage('数据库恢复失败!'+e.Message);   
      end;   
  
  end;   
end;   
其中dmData.adoQryTmp连接的是系统MASTER数据库,备份还原之前应该关闭要备份还原的AdoConn数据库   
  
连接AdoConn.Connected:=False;   
------------------------------------------------   
另一方法:   
备份如下:   
        try  
            backupString := 'BACKUP DATABASE [Paper] TO  DISK = N''+edit1.Text+'' WITH     
  
INIT ,  NOUNLOAD ,  NAME = N'Paper 备份',  NOSKIP ,  STATS = 10,  NOFORMAT';   
            adoquery1.Close;   
            adoquery1.SQL.Clear;   
            adoquery1.SQL.Add(backupString);   
            ADOQuery1.Prepared;   
            adoquery1.ExecSQL;   
            application.MessageBox('备份成功。','提示',0);   
        except   
            application.MessageBox('备份出错!请重新备份数据。','出错',0);   
        end;   
---------------------------   
还原如下:   
            if opendialog1.Execute then   
            begin   
                try  
                    adoquery1.Close();   
                    adoquery1.SQL.Clear;   
                    adoquery1.SQL.Add('use master');   
                    adoquery1.Prepared;   
                    adoquery1.ExecSQL;   
                    restorestring := 'RESTORE DATABASE [Paper] FROM  DISK =    
  
N''+opendialog1.FileName+'' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  REPLACE,RECOVERY';   
                    self.ADOCommand1.CommandText := restoreString;   
                    adocommand1.Execute;   
                    application.MessageBox('还原数据成功','提示',0);   
  
                    adoquery1.Close();   
                    adoquery1.SQL.Clear;   
                    adoquery1.SQL.Add('use paper');   
                    adoquery1.Prepared;   
                    adoquery1.ExecSQL;             
                except   
                    application.MessageBox('还原数据出错!请重新还原,并停止一切的数据操作!   
  
','提示',0);   
                end;   
            end;

热心网友

其他回答(0)
0人关注该问题
待解决问题



+1
 加载中...