码迷,mamicode.com
首页 > 数据库 > 详细

delphi数据库的备份及还原

时间:2015-09-03 21:34:25      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:

 

实例应用1:

//备份procedure TF_DataBaseBackUp.Btn_bfClick(Sender: TObject);
var i:integer;
begin
  if SaveDialog1.Execute then
  begin
    ADOConnection1.Connected:=False;
    ADOConnection1.ConnectionString:=StringReplace(GetConnectionString,Taxi,master,[rfReplaceAll]);
    ADOConnection1.Connected:=True;
    ADOQuery1.SQL.Text :=backup database Taxi to disk=+QuotedStr(SaveDialog1.FileName);
    try
      Btn_bf.Caption := 正在备份…;
      self.repaint;
      ADOQuery1.execsql;
      for i:=1 to 100 do
      begin
        Btn_bf.Caption := 备份中…+inttostr(i)+%;
        self.repaint;
        sleep(50);
      end;
      ShowMessage(数据备份操作已经成功完成!);
    except
      ShowMessage(数据备份时出错!请重试。);
    end;
    Btn_bf.caption:=  开始备份;
    self.repaint;
  end;
end;
//恢复
procedure TF_DataBaseBackUp.Btn_hfClick(Sender: TObject);
var i:integer;
begin
  if Application.MessageBox(该操作会把当前程序数据改为备份时的状态,您确定要这么做吗?,提示,mb_okcancel+MB_ICONQUESTION )<>idok then exit;
  if OpenDialog1.Execute then
  begin
    try
      ADOConnection1.Connected:=False;
      ADOConnection1.ConnectionString:=StringReplace(GetConnectionString,Taxi,master,[rfReplaceAll]);
      ADOConnection1.Connected:=True;
      Btn_hf.Caption := 清除数据库连接...;
      self.Repaint;
      ClearDBConnections();
      Btn_hf.Caption := 正在恢复...;
      self.repaint;
      ADOQuery1.SQL.Text :=restore database Taxi from disk=+QuotedStr(OpenDialog1.FileName);
      ADOQuery1.execsql;
      for i:=1 to 100 do
      begin                          
        Btn_hf.Caption := 恢复中…+inttostr(i)+%;
        self.repaint;
        sleep(50);
      end;
      Btn_hf.caption:=  开始恢复;
      self.repaint;
    except
      Application.MessageBox(数据恢复时出错!请重试。,提示,64);
      Btn_hf.caption:=  开始恢复;
      self.repaint;
      exit;
    end;
    application.MessageBox(数据库已成功恢复!请重新启动系统!,提示:,mb_ok+mb_iconinformation);
  end;
end;
//------------------------------------------------------------------------------
//函数名称: ClearDBConnections
//函数功能: 清除数据库连接
//------------------------------------------------------------------------------

procedure TF_DataBaseBackUp.ClearDBConnections;
var vspid:string;
begin
  //覆盖数据库,清除数据库现有连接
  ADOQuery1.Close;
  ADOQuery1.SQL.Text:=select   spid   from   sysprocesses   where   dbid=db_id(‘‘Taxi‘‘);
  ADOQuery1.Open;
  while not ADOQuery1.Eof do
  begin
    vspid:=ADOQuery1.FieldByName(spid).AsString;
    ADOQuery2.Close;
    ADOQuery2.SQL.Text:=kill +vspid;
    ADOQuery2.ExecSQL;
    ADOQuery1.Next;
  end;
end;

实例应用2:

procedure TF_BF.BitBtn1Click(Sender: TObject); 
var inif:Tinifile; 
T:string; 
begin 
  inif:=Tinifile.Create(ExtractFilePath(Paramstr(0))+data/SysSet.ini); 
  T:=inif.ReadString(Data,DbType,‘‘); 
  IF LENGTH(TRIM(EDIT2.Text))=0 THEN 
  BEGIN 
    APPLICATION.MessageBox(请指定数据备份的文件名!,林康软件,MB_OK+MB_ICONWARNING); 
  END 
  ELSE 
  BEGIN 
    if T=SQLserver then 
    begin 
      ADOQUERY1.Close; 
      ADOQUERY1.SQL.Clear; 
      ADOQUERY1.SQL.Add(USE MASTER); 
      ADOQUERY1.SQL.ADD(BACKUP DATABASE GZGL to disk=+#39+SAVEDIALOG1.FileName+#39+ with init);
      TRY 
        ADOQUERY1.ExecSQL; 
        APPLICATION.MessageBox(数据备份操作成功!,林康软件,MB_OK+MB_ICONWARNING); 
      EXCEPT 
        APPLICATION.MessageBox(数据备份操作失败!,林康软件,MB_OK+MB_ICONWARNING); 
      END; 
      close; 
      TRY 
        F_main.ADOConnection1.Close; 
        F_main.ADOConnection1.Open; 
      EXCEPT 
        APPLICATION.MessageBox(该系统需要重新启动, 请退出!,林康软件,MB_OK+MB_ICONWARNING); 
        application.Terminate; 
      END; 
    end; 
    if T=Access then 
    begin 
      F_MAIN.ADOConnection1.Close; 
      TRY 
        COPYFILE(PCHAR(ExtractFilePath(Paramstr(0))+DATA/gzgl.mdb),PCHAR(EDIT2.Text),FALSE); 
        APPLICATION.MessageBox(数据备份操作成功!,林康软件,MB_OK+MB_ICONWARNING); 
      EXCEPT 
        APPLICATION.MessageBox(数据备份操作失败!,林康软件,MB_OK+MB_ICONWARNING); 
      END; 
      F_MAIN.ADOConnection1.Open; 
    end; 
  END; 
end; 


恢复: 
procedure TF_HF.BitBtn1Click(Sender: TObject); 
var 
  t:string; 
  inif:Tinifile; 
begin 
  inif:=Tinifile.Create(ExtractFilePath(Paramstr(0))+data/SysSet.ini); 
  T:=inif.ReadString(Data,DbType,‘‘); 
  IF LENGTH(TRIM(EDIT2.Text))=0 THEN 
  BEGIN 
    APPLICATION.MessageBox(请指定数据恢复的文件名!,林康软件,MB_OK+MB_ICONWARNING); 
  END 
  ELSE 
  BEGIN 
    if T=SQLserver then 
    begin 
      if MESSAGEDLG(数据恢复操作将覆盖现有的数据,需要继续吗?,mtconfirmation,[MBYES,MBNO],1) <>Mryes THEN exit; 
      ADOQUERY1.Close; 
      ADOQUERY1.SQL.Clear; 
      ADOQUERY1.SQL.ADD(use master declare  @spid  int); 
      ADOQUERY1.SQL.ADD(declare  getspid  cursor  for); 
      ADOQUERY1.SQL.ADD(select  spid  from  sysprocesses  where  dbid=db_id(+#39+GZGL+#39+)); 
      ADOQUERY1.SQL.ADD(open  getspid); 
      ADOQUERY1.SQL.ADD(fetch  next  from  getspid  into  @spid); 
      ADOQUERY1.SQL.ADD(while  @@fetch_status   <  >-1); 
      ADOQUERY1.SQL.ADD(begin); 
      ADOQUERY1.SQL.ADD(exec(+#39+kill +#39++@spid)); 
      ADOQUERY1.SQL.ADD(fetch  next  from  getspid  into  @spid); 
      ADOQUERY1.SQL.ADD(end); 
      ADOQUERY1.SQL.ADD(close  getspid); 
      ADOQUERY1.SQL.ADD(deallocate  getspid); 
      ADOQUERY1.SQL.ADD(RESTORE DATABASE GZGL FROM disk=+#39+OPENDIALOG1.FileName+#39+ WITH REPLACE);
      TRY 
        ADOQUERY1.ExecSQL; 
        APPLICATION.MessageBox(数据恢复操作成功!,林康软件,MB_OK+MB_ICONWARNING); 
      EXCEPT 
        APPLICATION.MessageBox(数据恢复操作失败!,林康软件,MB_OK+MB_ICONWARNING); 
      END; 
      close; 
      TRY 
        F_main.ADOConnection1.Close; 
        F_main.ADOConnection1.Open; 
      EXCEPT 
        APPLICATION.MessageBox(该系统需要重新启动, 请退出!,林康软件,MB_OK+MB_ICONWARNING); 
        application.Terminate; 
      END; 
    end; 
    if T=Access then 
    begin 
      F_MAIN.ADOConnection1.Close; 
      TRY 
        COPYFILE(PCHAR(EDIT2.Text),PCHAR(ExtractFilePath(Paramstr(0))+DATA/Gzgl.mdb),FALSE); 
        APPLICATION.MessageBox(数据恢复操作成功!,林康软件,MB_OK+MB_ICONWARNING); 
      EXCEPT 
        APPLICATION.MessageBox(数据恢复操作失败!,林康软件,MB_OK+MB_ICONWARNING); 
      END; 
      F_MAIN.ADOConnection1.Open; 
    end; 
  END; 

end;

实例应用3: 

最简单的sql语句:备份与还原sql   server自带的数据库   
    
  在服务器上备份:   
  use   northwind   
  backup   database   northwind   to   disk=d:/northwind_bak.dat   with   init   
    
  restore   database   northnwind   from   disk   =   d:/northwind_bak.dat   
    
  ------------------------------------------------------------------   
  备份数据库这一操作在客户机上实现     
  客户机:machine   
  共享目录:share     

    
  backup:   
  bakcup   database   dbname   to   disk=//machine/share/data.bak   with   init   
  //machine/share目录要有写权限。   
    
  restore:   
  restore   database   dbname   from   disk=//machine/share/data.bak         
    
  //   
  备注:restore   语句有很多的选项,可以查看企业管理器的在线帮助。如下   
      with   replace,   move   dbname_dat   to   c:/mssql7/data/dbname.mdf,     
      move   dbname_log   to   c:/mssql7/data/dbname.log   
  其中c:/mssql7/data/是服务器的目录,这点要注意  

 

delphi数据库的备份及还原

标签:

原文地址:http://www.cnblogs.com/chenmfly/p/4780658.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!