delphi + ado + sqlserver2000如何完全和差异备份数据库?
完全和差异备份数据库在delphi里怎么写?

解决方案 »

  1.   

    完全备份
    var
       s_backuppath:string;
       s_server:string;
       s_database:string;
       s_backupfilename:string;
    begin
              StatusBar1.Panels[2].text:='';
              StatusBar1.Panels[2].text:='请等候,数据库备份中......';
              s_backuppath:=edit1.Text;
              s_server:=edit2.Text;
              s_database:=edit3.Text;
              s_backupfilename:=s_backuppath+datetostr(now);
              Adocommand1.ConnectionString :='Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog='+s_database+';Data Source='+s_server;
              ADOCommand1.CommandText := 'use Master';
              ADOCommand1.Execute;
              adocommand1.CommandText := 'execute sp_helpdevice';
              adocommand1.Execute;
              adocommand1.CommandText := 'backup database ' + s_database + ' to disk=''' +s_backupfilename + ''' with init';
              //adocommand1.CommandText := 'backup database ' + 'BanShanDB' + ' to disk=''' +'c:\data.bak' + ''' with init';
              adocommand1.Execute;
              adocommand1.CommandText := 'Use ' + s_database;
              adocommand1.Execute;
              StatusBar1.Panels[2].text:='';
              StatusBar1.Panels[2].text:='数据库备份完成!';
           //   application.MessageBox('已经成功备份数据库','数据库备份',MB_OK + MB_ICONINFORMATION);
    end;
      

  2.   

    差异备份数据库,可以先写一个存储过程,再用JOB
      

  3.   

    主要看你的SQL语句怎么写了。
      

  4.   

    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.上面的是一个数据库备份的代码