如题

解决方案 »

  1.   

    一个数据库备份恢复的源代码
    unit BackUp_Form;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, TFlatGaugeUnit, StdCtrls, TFlatEditUnit, ExtCtrls,FileCtrl;type
      TBackup_F = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        ZT_FE: TFlatEdit;
        JD_FG: TFlatGauge;
        Timer1: TTimer;
        procedure Timer1Timer(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Backup_F: TBackup_F;implementation{$R *.dfm}Uses
      ExtIniFiles,StrUtils;function GetFileNum(dir:string):integer;
    var
      sr:Tsearchrec;
    begin
      result:=0;
      if findfirst(dir,faanyfile,sr)=0 then
        repeat
          if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
            result:=result+1;
        until findnext(sr)<>0;
    end;
    //***********************************************************************************
    procedure Wait(second:Longint);
    var
      FirstTickCount:longint;
    begin
      FirstTickCount:=GetTickCount;
      repeat
        Application.ProcessMessages;
      until ((GetTickCount-FirstTickCount) >=second);
    end;
    //***********************************************************************************
    procedure TBackup_F.Timer1Timer(Sender: TObject);
    var
      myini:TExtIniFile;
      cz,num:integer;
      spath,dpath,name,RQ:string;
      sr:Tsearchrec;
      StartupInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
    begin
      Timer1.Enabled:=false;
      myini:=TExtIniFile.Create(ExtractFilePath(Application.ExeName)+'set.ini');
      cz:=myini.ReadInteger('bakup','CZ',0);
      if cz=0 then
        begin
          spath:=ExtractFilePath(Application.ExeName)+'Data';
          dpath:=myini.ReadString('bakup','BakPath','');
          dpath:=dpath+'\'+AnsiReplaceStr(DateTimeToStr(now),':','');
          ForceDirectories(dpath);
          num:=GetFileNum(spath+'\*.*');
          ZT_FE.Text:='正在备份数据库......';
          JD_FG.MaxValue:=num;
          if findfirst(spath+'\*.*',faanyfile,sr)=0 then
            repeat
              if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
                begin
                  copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
                  JD_FG.Progress:=JD_FG.Progress+1;
                end;
              Wait(100);
            until findnext(sr)<>0;
          ZT_FE.Text:='数据库备份成功';
          MessageBox(handle,'恭喜你:数据库备份成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
        end
        else begin
          RQ:=myini.ReadString('bakup','RQ','');
          spath:=myini.ReadString('bakupdian',RQ,'');
          spath:=spath+'\'+RQ;
          dpath:=ExtractFilePath(Application.ExeName);
          dpath:=dpath+'Data';
          num:=GetFileNum(spath+'\*.*');
          ZT_FE.Text:='正在还原数据库......';
          JD_FG.MaxValue:=num;
          if findfirst(spath+'\*.*',faanyfile,sr)=0 then
            repeat
              if(sr.Attr<>fadirectory)and(sr.Name<>'.')and(sr.Name<>'..') then
                begin
                  copyfile(pchar(spath+'\'+sr.Name),pchar(dpath+'\'+sr.Name),false);
                  JD_FG.Progress:=JD_FG.Progress+1;
                end;
              Wait(100);  
            until findnext(sr)<>0;
          ZT_FE.Text:='数据库还原成功';
          MessageBox(handle,'恭喜你:数据库还原成功!','祝贺你',MB_OK or MB_ICONINFORMATION);
        end;
      StartupInfo.cb:=sizeof(StartupInfo);
      FillChar(StartupInfo,Sizeof(StartupInfo),#0);
      CreateProcess(pchar(ExtractFilePath(Application.ExeName)+'TSGL.exe'),nil,nil,nil,false,0,nil,nil,StartupInfo,ProcessInfo);
      close;
    end;end.
      

  2.   

    你想怎么恢复与备份?SQL SERVER里有恢复和备份.
    我不明白呵呵~~才疏学浅.....
    学习...
      

  3.   

    sql server 数据库备份啊
      

  4.   

    delphi 程序里控制,用户可以操纵备份
    我sql server 不熟,郁闷...
      

  5.   

    procedure TFrm_shuju_weihu.FormCreate(Sender: TObject);
    var
      SourcePath: string;
    begin
      SELF.Caption := application.Title + ' - 数据备份';
      B_showmessage := true;
      SourcePath := ExtractFileDir(Application.ExeName);
      //取得应用程序路径
      if (StrLen(PChar(SourcePath)) <> 3) then
        SourcePath := SourcePath + '\';
      Edit_path.Text := SourcePath + 'BAK\Haishi' + formatdatetime('yyyymmdd',
        date) + '.back';
      //设置路径名+文件名
    end;procedure TFrm_shuju_weihu.Edit_pathChange(Sender: TObject);
    begin
    if trim(Edit_path.Text) <> '' then
        BackData.Enabled := True
      else
        RecoverData.Enabled := False; //当路径框中为空时候, 恢复数据不可用
    end;procedure TFrm_shuju_weihu.BackDataClick(Sender: TObject);
    begin
    self.Caption := '正在备份数据....';
      a1.Visible :=true;
      a1.Active := true;
    Dm_data.cback.CommandText := 'backup database TaxKP to disk=''' + Edit_path.Text +
        ''''; //备份数据库命令语句
      try
        Dm_data.cback.Execute;
        // 执行备份
          a1.Active := false;
        showmessage('      备份成功!');  except
        showmessage('      备份失败!');
        a1.Active := false;
        a1.Visible :=false;;
      end;
      self.Caption := '数据备份和恢复';
    end;procedure TFrm_shuju_weihu.RecoverDataClick(Sender: TObject);
    var
      DataPath: string;
    begin
      self.Caption := '正在恢复数据....';
      try
        Dm_Data.backconn.Close;
        Dm_Data.backconn.Connected := false;
      except
        MessageBox(0, '关闭数据库错误', '错误', MB_OK + MB_ICONSTOP + MB_TOPMOST);
      end;  OpenDialog1.Filter := '备份文件 (*.back)|*.back|所有文件 (*.*)|*.*';
      //设置备份文件后缀
      OpenDialog1.InitialDir := ExtractFileDir(Application.ExeName) + '\Bak';
      //设置备份路径
      if OpenDialog1.Execute then
        DataPath := OpenDialog1.FileName;
      if DataPath <> '' then
      begin
        if
          application.MessageBox('此操作将使上次备份以来的所有数据丢失,是否继续?',
          '恢复数据', MB_OKCANCEL) = idOK then
        begin
        a1.Visible :=true;
          a1.Active := true;
          Dm_Data.backconn.Connected := True;
          Dm_Data.cback.Connection := Dm_Data.backconn;
          Dm_Data.cback.CommandText :=
            'ALTER DATABASE TaxKp SET OFFLINE WITH ROLLBACK IMMEDIATE'; //切断连接
          Dm_Data.cback.Execute;
          Dm_Data.cback.CommandText := 'restore database TaxKp from disk=''' + DataPath +
            '''' + ' with replace'; //恢复数据命令语句
          try
            try
              Dm_Data.cback.Execute;
              //执行恢复过程
              a1.Visible :=false;
              showmessage('    恢复成功!');        except
              showmessage('数据库正在被使用!请确定已关闭其它使用该数据库程序!');
              showmessage('    恢复失败!');
            end;
          finally
            a1.Active := false;
            a1.Visible :=false;
            // showmessage('start');
            Dm_Data.cback.CommandText :=
              'ALTER DATABASE TaxKp SET ONLINE WITH ROLLBACK IMMEDIATE'; //重新连接数据库
            Dm_Data.cback.Execute;
            // 关闭临时数据库
            Dm_Data.backconn.Connected := False;
            // 打开数据库
         //   Dm_Data.ClientFamily.CommandText := 'select * from ClientFamilyTable';
            Dm_data.AdoCN_Data.Connected := True;
          //  showmessage('Dm_data.AdoCN_Data.Connected := True');
            try
              // 打开各个数据表是否有错误
              Dm_Data.Ads_Login_User.Open;
              Dm_Data.Ads_rizhi.Open;
            //  Dm_Data.client.Open;
            //  Dm_Data.Toper.Open;
            //  Dm_Data.Tuser.Open;
            //  Dm_Data.ZHBX.Open;
            //  Dm_Data.Model.Open;
            //  Dm_Data.ClientFamily.Open;
             // Dm_Data.ChargeItem.Open;
             // Dm_Data.ClientRoom.Open;
            //  Dm_Data.Charge.Open;
             // Dm_Data.ClientPay.Open;
             // Dm_Data.ClientAdvance.Open;
            except          showmessage('程序运行发生不可预知错误,请重新启动程序!');
              //结束该程序          Application.Terminate;
            end;
          end;
        end;
      end;
      self.Caption := '数据备份和恢复';
    end;procedure TFrm_shuju_weihu.BrowseBtnClick(Sender: TObject);
    begin
     Application.CreateForm(TSelectDir, SelectDir); //显示路径选择窗体
      SelectDir.DriveComboBox1.Text := ExtractFileDrive(Edit_path.Text);
      if (FileExists(Edit_path.Text)) then //检测路径是否存在
        SelectDir.DirectoryListBox1.Directory := Edit_path.Text;
      if (SelectDir.ShowModal = mrOK) then //当返回值为mrOK时,得到选择的路径
        Edit_path.Text := SelectDir.Label3.Caption + '\TaxFp' +
          formatdatetime('yyyymmdd', date) + '.back';
      SelectDir.free;
    end;end.
      

  6.   

    看出来了,是用backup 和restore
    有没有讲思路讲得明白一点的说法,麻烦给我讲一下
      

  7.   

    if Trim(e_lj.Text) = '' then
      begin
      Application.MessageBox('文件路径不能为空,请选择!','提示!',mb_ok+ mb_iconstop);
      Exit;
      end;
      DM.CLE_Connect.Connected := False;
      MySQL := 'ALTER DATABASE DB_CLE SET OFFLINE WITH ROLLBACK IMMEDIATE';
      with ADOQueryRestor do
      begin
        Close;
        SQL.Clear;
        SQL.Text := MySQL;
        try
          ExecSQL;
        except    end;
      end;
      RestorStr := 'RESTORE DATABASE DB_CLE FROM DISK = ''' + Trim(e_lj.Text) + ''' WITH REPLACE';
      with ADOQueryRestor do
      begin
        Close;
        SQL.Clear;
        SQL.Text := RestorStr;
        try
          ExecSQL;
          Application.MessageBox('恢复数据库成功!','提示!',mb_ok+mb_iconinformation);
        except
          Application.MessageBox('恢复数据库出错!','错误!',mb_ok+mb_iconError);
        end;
      end;
      MySQL := 'ALTER DATABASE DB_CLE SET ONLINE WITH ROLLBACK IMMEDIATE';
      with ADOQueryRestor do
      begin
        Close;
        SQL.Clear;
        SQL.Text := MySQL;
        try
          ExecSQL;
        except    end;
      end;
      DM.CLE_Connect.Connected := True;
      

  8.   

    是啊,其实给几条sql语句即可
      

  9.   

    http://www.2ccc.com/article.asp?articleid=1360
      

  10.   

    sqlserver要备份和恢复数据库必须要连接到master数据库?
      

  11.   

    路径在程序里指定,用SQL语句传过去的,出错
      

  12.   

    打开sqlserver 企业管理器,选择你要备份的数据库。点击右键,选择backup Database再按向导来就行了。
    要还原的话,就选择Restore Database再选择从设备选择你备份的数据。其余跟着向导来做就行了。