我见财务等软件有备份与恢复功能,
现在我用SQL Server作后台数据库做了一个小程序,
我如何做数据备份与恢复功能,
请高手指点,谢谢。

解决方案 »

  1.   

    如果是单用户,用以下的方法可以,但如果是多用户,自己试验一下吧,我也不知道可不可以。
    1. ADOConnection1 连接你的业务数据库。
    2. ADOConnection2 连接 MASTER 数据库。
    3. ADOCommand1.Connection := ADOConnection2;
    假设你的数据库名为: DataBaseName
    Button.OnClick:
    begin
     ADOConnection1.Connected := False;
     ADOCommand1.CommandText := 'BACKUP DATABASE DataBaseName TO DISK = ' + #39 + 'C:\KKK.BAK' + #39;
     ADOCommand1.Execute;
     ADOCommand1.CommandText := 'ALTER DATABASE DataBaseName SET OFFLINE WITH ROLLBACK IMMEDIATE';
     ADOCommand1.Execute;
     ADOCommand1.CommandText := 'RESTORE DATABASE DataBaseName FROM DISK = ' + #39 + 'C:\KKK.BAK' + #39;
     ADOCommand1.Execute;
     ADOCommand1.CommandText := 'ALTER DATABASE DataBaseName SET ONLINE WITH ROLLBACK IMMEDIATE';
     ADOCommand1.Execute;
     ADOConnection1.Connected := True;
     ADOTable1.Active := true;
    end;  
      

  2.   

    BACKUP DATABASE [XTPT] TO  DISK = N'C:\MSSQL7\BACKUP\Data_backup' WITH  INIT ,  NOUNLOAD ,  NAME = N'XTPT backup',  NOSKIP ,  STATS = 10,  NOFORMAT RESTORE DATABASE [XTPT] FROM  DISK = N'C:\MSSQL7\BACKUP\Data_backup' WITH  FILE = 1,  NOUNLOAD ,  STATS = 10,  RECOVERY ,  REPLACE 说明:其中的XTPT为一个数据库的名知名称。
          这是一个SQLSERVER 下的语法,如果是SYBASE 则      是  DUMP  。LOAD 
    你可以把这些语放到一个QUERY 中来执行它呀。
      

  3.   

    这是数据备份,有些地方还是要改一下的
    var
       data_str:string;
    begin
      savedialog1.FileName:=datetimetostr(date())+'.mdb';
      if savedialog1.Execute then
       begin
          datamodform.adoConnection1.Connected:=false;
          data_str:=ExtractFilePath(application.ExeName)+'\dindansystem.mdb';
          datamodform.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+data_str+';Persist Security Info=True';
          datamodform.ADOConnection1.Provider:='Microsoft.Jet.OLEDB.4.0';
          datamodform.ADOConnection1.LoginPrompt:=false;
        copyfile(pchar(Extractfilepath(application.ExeName)+'\dindansystem.mdb'),pchar(savedialog1.FileName),false);
        application.MessageBox('数据库被成功导出!','信息提示',MB_OK);
       end;
      

  4.   

    这是数据恢复,有些地方还是要改一下的
    var i:integer;
    data_str:string;
    begin
      i:=application.MessageBox('数据导入将覆盖掉现有的数据库,您确认吗?','信息提示',MB_IconInformation+MB_YesNo+MB_DefButton2);
      if i=6 then
       begin
        if opendialog1.Execute then
         begin
          datamodform.adoconnection1.connected:=false;
          data_str:=ExtractFilePath(application.ExeName)+'\dindansystem.mdb';
           datamodform.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source='+data_str+';Persist Security Info=True';
          datamodform.ADOConnection1.Provider:='Microsoft.Jet.OLEDB.4.0';
          datamodform.ADOConnection1.LoginPrompt:=false;
          copyfile(pchar(opendialog1.FileName),pchar(Extractfilepath(application.ExeName)+'\dindansystem.mdb'),false);
          application.MessageBox('数据库被成功导入!','信息提示',MB_OK);
         end;
        end;
      

  5.   

    备份:back database to disk='路径';
    恢复:restore database from disk='路径';