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

📄 filebackupthreadunit.pas

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

unit FileBackupThreadUnit;

interface

uses
  Classes, SysUtils, Windows, IniFiles;

type
  TFileBackupThread = class(TThread)
  private
    { Private declarations }
    itemName: String;        //文件备份项目名称
    sourceDir: String;       //源数据
    amiDir: String;          //目的空间
    atPointTime: TdateTime;  //差异控制时间
    freeSize : real;         //目的空间剩余
    dirSizeAll: real;        //源数据量
    
    procedure BackupDirDone;
  protected
    procedure Execute; override;
  public
    constructor Create(_sourceDir, _amiDir, _itemName: String; _atPointTime:TDateTime; _freeSize: real);
  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 TFileBackupThread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ TFileBackupThread }
uses
   SqlFunctionUnit, MainUnit;

constructor TFileBackupThread.Create(_sourceDir, _amiDir, _itemName: String; _atPointTime:TDateTime; _freeSize:real);
begin
  sourceDir:=_sourceDir;
  amiDir:=_amiDir;
  itemName:=_itemName;
  atPointTime:=_atPointTime;
  freeSize:=_freeSize;
  inherited Create(True);
end;

procedure TFileBackupThread.BackupDirDone;
var
  logfile:textFile;
  beginTime, endTime: TDateTime;
  isWrong: Boolean;
  isfull: Boolean;
  inifile: TIniFile;
begin
  try
    dirSizeAll:=0;
    isWrong:=False;
    isfull:=False;
    beginTime:=now;
    AssignFile(LogFile,ExtractFilePath(ParamStr(0))+'\Log\FileBackupLog.log');
    if fileExists(ExtractFilePath(ParamStr(0))+'\Log\FileBackupLog.log') then
       Append(LogFile)
    else
       Rewrite(LogFile);
    GetDirSize(sourceDir,atPointTime,dirSizeAll);
    if dirSizeAll>freeSize then
      begin
        isWrong:=True;
        isfull:=True;
      end
    else
      begin
        //^---
        try
          DoCopyDir(sourceDir,amiDir,atPointTime);
        except
          isWrong:=True;
        end;
        //^ 文件传输(备份过程)
      end;
  finally
    endTime:=now;
    if not isWrong then    //报错处理
      begin
        try
          inifile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'\'+itemName+'.ini');
          inifile.WriteFloat('备份设置','目的地址空间',freeSize-dirSizeAll);
          inifile.WriteDateTime('备份设置','最近一次备份时刻',beginTime);
        finally
          inifile.Free;
        end;
        writeln(LogFile,DateTimeToStr(beginTime)+'  '+itemName+'成功备份到'+amiDir+',耗时:'+TimeToStr(endTime-beginTime)+',备份量:'+FormatFloat('#,##0.00',dirSizeAll)+'MB');
        MainForm.StatusBar1.Panels[1].Text:='文件项目'+itemName+'备份成功!'+DateTimeToStr(endTime);
      end
    else
      begin
        if isfull then
          begin
            writeln(LogFile,DateTimeToStr(beginTime)+'  '+itemName+'备份失败。空间不足!');
            MainForm.StatusBar1.Panels[1].Text:='文件项目'+itemName+'备份失败,空间不足!'+DateTimeToStr(endTime);
          end
        else
          begin
            writeln(LogFile,DateTimeToStr(beginTime)+'  '+itemName+'备份失败。备份文件未能成功备份到指定目的地址!');
            MainForm.StatusBar1.Panels[1].Text:='文件项目'+itemName+'备份失败,备份文件未能成功备份到指定目的地址!'+DateTimeToStr(endTime);
          end;
      end;
    CloseFile(logFile);
  end;
end;

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

end.
 

⌨️ 快捷键说明

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