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

📄 unitbackup.pas

📁 在软件系统中,数据的备份与恢复是相当重要的,下面就给出了一个数据的自动备份程序,DELPHI编写
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit UnitBackup;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db,ADODB, ExtCtrls, ShellApi, Menus,
  ComCtrls, Registry, ScktComp , StdCtrls , Buttons,  Variants,IniFiles ,StrUtils,
  ImgList ;

 const
  WM_BARICON=WM_USER+200; //自定义消息
  ID_MAIN=100;//定义图标的ID
type
  TFrmBackup = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    CmbServerName: TComboBox;
    CmbDatabaseName: TComboBox;
    EdtUserName: TEdit;
    EdtPassword: TEdit;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    btnSave: TBitBtn;
    btnCancel: TBitBtn;
    cboAutoRun: TCheckBox;
    EdtPath: TEdit;
    btnPath: TButton;
    btnSetTime: TBitBtn;
    connAdo: TADOConnection;
    connQuery: TADOQuery;
    btnBackup: TBitBtn;
    Timer1: TTimer;
    cboShowMessage: TCheckBox;
    PopupMenu: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    ImageList1: TImageList;
    cboMin: TCheckBox;
    cboClose: TCheckBox;
    cboStart: TCheckBox;
    BitBtn1: TBitBtn;
    Button1: TButton;
    procedure btnSetTimeClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure btnBackupClick(Sender: TObject);
    procedure btnPathClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure BitBtn1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FilePath:String;
    BackupIniFile:TIniFile;
    ServerName,DatabaseName,UserName,Password:String;

    Run,StartMin,Show,Min,CloseShow:integer;
    Conn:Boolean;  //判断联接是否成功
    connString:String; //联接字符串
    BackFileName:String; //备份文件的名称
    procedure AddIcon(hwnd:HWND);
    procedure RemoveIcon(hwnd: HWND); //从状态区移去图标

    procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
    procedure WMBarIcon(var Message:TMessage);message WM_BARICON;
    procedure WMMini(var Message:TMessage);message WM_SETFOCUS;
    procedure BackupBase(FileName:String); //定义备份过程
    procedure ReadIni; //读取INI文件中的内容
  public
    { Public declarations }

    BackupType,EveryTime,EveryDay,EveryMonth,EveryWeek:integer;
    procedure ComBoboxValue(Cmb:TComBoBox;Str:string) ;
  end;


var
  FrmBackup: TFrmBackup;
implementation

uses UnitFrmSetupTime, UnitFilePath, UnitDirPath, UnitDlg, UnitChose;

{$R *.dfm}
procedure TFrmBackup.AddIcon(hwnd:HWND);
var
  lpData:PNotifyIconData;
begin
  lpData := new(PNotifyIconDataA);
  lpData.cbSize := 88;
  lpData.Wnd := FrmBackup.Handle;
  lpData.hIcon := FrmBackup.Icon.Handle;
  lpData.uCallbackMessage := WM_BARICON;
  lpData.uID :=0;
  lpData.szTip := '数据库备份工具';
  lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
  Shell_NotifyIcon(NIM_ADD,lpData);
  dispose(lpData);
  FrmBackup.Visible := False;
end;

procedure TFrmBackup.RemoveIcon(hwnd: HWND);//从状态区移去图标
var
  lpData:PNotifyIconData;
begin
  //如果用户点击任务栏图标则将图标删除并回复窗口。
  lpData := new(PNotifyIconDataA);
  lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
  lpData.Wnd := FrmBackup.Handle;
  lpData.hIcon := FrmBackup.Icon.Handle;
  lpData.uCallbackMessage := WM_BARICON;
  lpData.uID :=0;
  lpData.szTip := 'Samples';
  lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
  Shell_NotifyIcon(NIM_DELETE,lpData);
  dispose(lpData);
end;

procedure TFrmBackup.WMSysCommand(var Message:TMessage);
begin
  if Message.WParam = SC_ICON then
  begin
     //如果用户最小化窗口则将窗口
     //隐藏并在任务栏上添加图标
     AddIcon(handle);
  end
  else if (Message.WParam= SC_Close) and (Min=1)then begin
      Application.Minimize;
      AddIcon(handle);
  end
  else if (Message.WParam=WM_CREATE) and (Min=1)then begin
      Application.Minimize;
      AddIcon(handle);
  end
  else
     //如果是其它的SystemCommand
     //消息则调用系统缺省处理函数处理之。
     DefWindowProc(FrmBackup.Handle,Message.Msg,Message.WParam,Message.LParam);
end;

procedure TFrmBackup.WMBarIcon(var Message:TMessage);
var
   lpData:PNotifyIconData;
   Pt:TPoint;
begin
  if (Message.LParam = WM_LBUTTONDOWN) then
   begin
     RemoveIcon(handle);
     FrmBackup.Visible := True;
   end
   else if (Message.LParam=WM_RBUTTONDOWN) then
   begin
     SetForeGroundWindow(lpData.Wnd);
     GetCursorPos(Pt);
     Popupmenu.Popup(Pt.X,pt.y);
   end;
end;

procedure TFrmBackup.WMMini(var Message:TMessage);
begin
  if (Message.Msg=WM_CREATE) then begin
      Application.Minimize;
      AddIcon(handle);
  end
end;

//定义备份过程
procedure TFrmBackup.BackupBase(FileName:String);
begin
  try
    screen.Cursor:=crSqlWait;
    with connQuery do
    begin
      close;
      Sql.Text:='Backup Database '+Trim(CmbDatabaseName.Text)+' to Disk='''+FileName+''' ';
      ExecSQL;
    end;
    screen.Cursor:=crDefault;
  except
    MessageBox(handle,'备份失败!','提示',MB_IconWarning+mb_Ok);
    screen.Cursor:=crDefault;
    Exit;
  end;
end;

//读取INI文件中的内容
procedure TFrmBackup.ReadIni;
begin
  FilePath:=ExtractFilePath(Application.ExeName)+'System.ini';
  BackupIniFile:=TIniFile.Create(FilePath);
  ServerName:=BackupIniFile.ReadString('Database','ServerName','');
  DatabaseName:=BackupIniFile.ReadString('Database','DatabaseName','');
  UserName:=BackupIniFile.ReadString('Database','UserName','');
  Password:=BackupIniFile.ReadString('Database','Password','');
  Run:=BackupIniFile.ReadInteger('AutoRun','Run',0);
  StartMin:=BackupIniFile.ReadInteger('AutoRun','StartMin',0); 
  Show:=BackupIniFile.ReadInteger('AutoRun','Show',0);
  Min:=BackupIniFile.ReadInteger('AutoRun','Min',0);
  CloseShow:=BackupIniFile.ReadInteger('AutoRun','CloseShow',0);

  BackupType:=BackupIniFile.ReadInteger('Backup','BackupType',0);
  EveryTime:=BackupIniFile.ReadInteger('Backup','EveryTime',0);
  EveryDay:=BackupIniFile.ReadInteger('Backup','EveryDay',0);
  EveryWeek:=BackupIniFile.ReadInteger('Backup','EveryWeek',0);
  EveryMonth:=BackupIniFile.ReadInteger('Backup','EveryMonth',0);

  CmbServerName.Text:=ServerName;
  //CmbDatabaseName.Text:=DatabaseName;

  ComBoboxValue(cmbDatabaseName,DatabaseName);

  EdtUserName.Text:=UserName;
  EdtPassword.Text:=Password;
  EdtPath.Text:=BackupIniFile.ReadString('FilePath','Path','');
  
  if Run=1 then  //初始化<随开机启动>
    cboAutoRun.Checked:=True
  else
    cboAutoRun.Checked:=False;
  if StartMin=1 then //初始化<启动后最小化>
    cboStart.Checked:=True
  else
    cboStart.Checked:=False;
  if Show=1 then //初始化<备份时显示提示信息>
    cboShowMessage.Checked:=True
  else
    cboShowMessage.Checked:=False;
  if Min=1 then  //初始化<关闭时最小化>
    cboMin.Checked:=True
  else
    cboMin.Checked:=False;
  if CloseShow=1 then  //初始化<不显示关闭信息>
    cboClose.Checked:=True
  else
    cboClose.Checked:=False;
end;

procedure TFrmBackup.btnSetTimeClick(Sender: TObject);
begin
  Application.CreateForm(TFrmSetupTime,FrmSetupTime); 
  FrmSetupTime.ShowModal;
  FrmSetupTime.Free;
end;

procedure TFrmBackup.btnSaveClick(Sender: TObject);
var
  reg:TRegistry;
  S_RegTree:String;
begin
  if not conn then //判断数据库联接是否成功,只有成功之后才能保存
  begin
    MessageBox(handle,'数据库联接没有成功,所以不能保存!','错误',mb_IconWarning+mb_Ok);
    CmbServerName.SetFocus;
    Exit;
  end;
  //将数据库联接参数保存到Ini文件中
  BackupIniFile.WriteString('Database','ServerName',Trim(CmbServername.Text));
  BackupIniFile.WriteString('Database','DatabaseName',DatabaseName);
  BackupIniFile.WriteString('Database','UserName',Trim(EdtUserName.Text));
  BackupIniFile.WriteString('Database','Password',Trim(EdtPassword.Text));
  BackupIniFile.WriteString('FilePath','Path',Trim(EdtPath.Text));
  //判断是否开机时起动系统
  reg:=tregistry.Create;
  Reg.RootKey:=HKEY_LOCAL_MACHINE;
  S_RegTree:='\Software\Microsoft\Windows\CurrentVersion\Run';
  if Reg.OpenKey(S_RegTree,False)=false then
    Reg.CreateKey(S_RegTree);
  Reg.OpenKey(S_RegTree,True);
  FilePath:=ExtractFilePath(Application.ExeName)+'Backup.exe';

  if cboAutoRun.Checked then
  begin
    Reg.WriteString('BackupDatabase',FilePath);
    BackupIniFile.WriteInteger('AutoRun','Run',1);
  end
  else begin
    Reg.DeleteValue('BackupDatabase');
    BackupIniFile.WriteInteger('AutoRun','Run',0);
  end;
  //启动后最小化

⌨️ 快捷键说明

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