⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 backupthreadunit.pas

📁 软件可自动完成SQL Server数据库和文档的数据定时自动备份
💻 PAS
字号:
//*-----------------------------------------------------------------------------
//*  系统名称:数据自动备份系统
//*  作    者:陈春华
//*  开发时间:2005
//*  Windows2000 Server + SQL Server2000 + Delphi7
//*  功能简介:
//*              软件可自动完成SQL Server数据库和文档的数据定时自动备份,
//*          由用户选择对哪些数据库或文档进行数据备份,提供对备份、还原
//*          数据作业的管理、分析、日志跟踪等功能,备份频率不受限制。
//*-----------------------------------------------------------------------------

unit BackupThreadUnit;

interface

uses
  Classes, ADODB, SysUtils, Windows;

type
  TBackupThread = class(TThread)   //数据库备份线程
  private
    { Private declarations }
    serverName: String;            //服务器名称
    userName: String;              //用户名
    pswd: String;                  //密码
    DBName: String;                //数据库
    path: String;                  //备份路径
    backupFile:String;             //整合了备份文件名的备份路径
    remoteBackup:Boolean;          //备份地址是否是远程标志
    DBBackupFileSize:real;         //备份量

    procedure BackupDone;          //备份执行过程
  protected
    procedure Execute; override;
  public
    constructor Create(_serverName, _userName, _pswd, _DBName,_path:String);
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TBackupThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }
uses
  SqlFunctionUnit, MainUnit;

{ TBackupThread }
constructor  TBackupThread.Create(_serverName, _userName, _pswd, _DBName,_path:String);
begin
  serverName:=_serverName;
  userName:=_userName;
  pswd:=_pswd;
  DBName:=_DBName;
  path:=_path;
  DBBackupFileSize:=0;
  backupFile:=path+'\'+ DBName+'.bak';    //整合备份目标
  remoteBackup:=False;
  if copy(path,1,2)='\\' then             //远程目的地址判断
    begin
      backupFile :=ExtractFilePath(ParamStr(0))+'TempBackupFile\'+ DBName+'.bak';
      remoteBackup:=True;
    end;
  inherited Create(True);
end;
procedure TBackupThread.BackupDone;
var
  conn: TADOConnection;
  query: TADOQuery;
  sqlStr: String;
  LogFile: Textfile;
  isWrong: Boolean;                 //报错标志
  beginTime, endTime: TDateTime;    //备份起始时间
begin
  try
    isWrong:=False;
    beginTime:=now;
    AssignFile(LogFile,ExtractFilePath(ParamStr(0))+'\Log\DBBackupLog.log');
    if fileExists(ExtractFilePath(ParamStr(0))+'\Log\DBBackupLog.log') then
       Append(LogFile)                   //日志文件有则增加,无则创建
    else
       Rewrite(LogFile);
    try
      try
        conn:=TADOConnection.Create(nil);
        conn.LoginPrompt:=False;
        ConnectToSqlServer(pswd,userName,serverName,DBName,conn);
        //^ 连接数据库
        query:=TADOQuery.Create(nil);
        query.Connection:=conn;
        sqlStr:='Backup Database '+'"'+DBName+'"'+' To Disk ='''+backupFile+'''';
        ExecuteSQLPro(sqlStr,1,query);
        //^ 数据库备份sql语句
        DBBackupFileSize:=GetFileSize(backupFile);
        if remoteBackup then      //如果是远程地址,则从本地备份到远程目的地址
          begin
            try
              try
                CopyFile(PChar(backupFile),PChar(path+'\'+ DBName+'.bak'),False);
                //^ 主传输
              except
                SendFile(backupFile,path+'\'+ DBName+'.bak');
                //^ 辅传输
              end;
            finally
              deletefile(PChar(backupFile));
            end;
          end;
      except
        isWrong:=True;
      end;
    finally
      query.Close;
      conn.Close;
      query.Free;
      conn.Free;
    end;
  finally
    endTime:=now;
    if isWrong then    //报错处理
      begin
        writeln(LogFile,DateTimeToStr(beginTime)+'  数据库'+DBName+'备份失败。');
        MainForm.StatusBar1.Panels[0].Text:='数据库'+DBName+'备份失败!'+DateTimeToStr(endTime);
      end
    else
      begin
        writeln(LogFile,DateTimeToStr(beginTime)+', 数据库'+DBName+'成功备份到'+path+'\'+ DBName+'.bak,耗时:'+TimeToStr(endTime-beginTime)+',备份量:'+FormatFloat('#,##0.00',DBBackupFileSize)+'MB');
        MainForm.StatusBar1.Panels[0].Text:='数据库'+DBName+'备份成功!'+DateTimeToStr(endTime);
      end;
    CloseFile(LogFile);
  end;
end;

procedure TBackupThread.Execute;
begin
  { Place thread code here }
  FreeOnTerminate:=True;
  synchronize(BackupDone);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -