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

📄 unit10.pas

📁 以前在某高校做外聘教师时做的学生学籍管理系统(delphi+access)。献丑献丑
💻 PAS
字号:
unit Unit10;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, XPMenu, ExtCtrls;

type
  TRestoreDataBase = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    XPMenu1: TXPMenu;
    BitBtn3: TBitBtn;
    Timer1: TTimer;
    GroupBox1: TGroupBox;
    ListBox1: TListBox;
    BitBtn4: TBitBtn;
    OpenDialog1: TOpenDialog;
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Timer1Timer(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  RestoreDataBase: TRestoreDataBase;

implementation

uses implemntation,unit5, Unit6, Unit2;

{$R *.dfm}

procedure TRestoreDataBase.FormActivate(Sender: TObject);
var n:integer;
begin

listbox1.Clear;
for n:=0 to Bakup_Num do begin  //检测各备份文件是否存在并显示出来
if FileExists(Product_Dir+Bakup_Dir+'data.00'+inttostr(n)) then begin
    listbox1.Items.Add(Bakup_Dir+'data.00'+inttostr(n)+'-----'+ (DateTimeToStr(FileDateToDateTime(FileAge(Bakup_Dir+'data.00'+inttostr(n))))));
   end
 end;


if listbox1.Count=0 then    //检测看是否有备份如果没有提示是否新创建
  if application.MessageBox('当前备份列表为空,以防数据丢失,要现在创建吗?','备份确认',mb_yesno)=  mrYes then begin
     if not (copyfile(pchar(Product_Dir+data_path),pchar(Product_Dir+Bakup_Dir+'data.000'),true)) then  showmessage('数据库备份出错!请检查数据文件或磁盘。');
 FormActivate(Sender);   //重新执行过程把刚备份的文件显示出来
 end;


end;









procedure TRestoreDataBase.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
Action := cafree;

end;

procedure TRestoreDataBase.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=VK_ESCAPE then self.close;

end;


procedure TRestoreDataBase.BitBtn2Click(Sender: TObject);
var n:integer;
begin
if application.MessageBox('真的要删除所有的数据库备份吗?','清空确认',mb_yesno)=  mrYes then begin
 try
  for n:=0 to Bakup_Num do
     begin   deletefile(Product_Dir+Bakup_Dir+'data.00'+inttostr(n))  end;
     except  showmessage('清空备份文件失败!请检查磁盘');
  end;
 end;
FormActivate(Sender);   //重新执行过程把刚备份的文件显示出来

end;





procedure TRestoreDataBase.BitBtn3Click(Sender: TObject);
begin
close;
end;

procedure TRestoreDataBase.BitBtn1Click(Sender: TObject);
var
now_select,msgstr:string;
n:integer;

begin
if (listbox1.ItemIndex<>-1) or (sender<>bitbtn1) then
   if application.MessageBox('是否真的把数据库恢复到历史备份状态?','备份确认',mb_yesno)=  mrYes then
 begin
  if listbox1.ItemIndex<>-1 then   //判断是否在列表中列选中对象,否则程序将出错
   begin now_select:=listbox1.Items[listbox1.ItemIndex];
         delete(now_select,length(Bakup_Dir)+9,50);  //取出选中的列表中的字符串中的路径及文件名
   end;


//恢复之前询问是否备份当前数据库 过程类同备份单元中的备份功能
if application.MessageBox('恢复之前要备份当前数据库吗?','备份确认',mb_yesno)=  mrYes then
 begin
try
deletefile(Product_Dir+Bakup_Dir+'data.001');
for n:=1 to Bakup_Num do
  begin
  if FileExists(Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(n)) then RenameFile(Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(n),Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(n-1));
  end;
 copyfile(pchar(Product_Dir+data_path),pchar(Product_Dir+Bakup_Dir+'data'+'.00'+inttostr(Bakup_Num)),true)
  except
   showmessage('数据库备份出错!请检查数据文件或磁盘。');
  end;
  FormActivate(Sender);   //重新执行过程把刚备份的文件显示出来
 end;

//关闭所有子窗体
if form5.MDIChildCount>0 then
 begin
        n:=form5.MDIChildCount;
        for n:=0 to n do form5.MDIChildren[0].free;
 end;
  try
        dm.free;      //卸载数据库连接窗体
        form2.free;   //卸载数据库连接窗体
        login_user:='None';
     if sender=bitbtn4 then now_select:=opendialog1.FileName;   //判断是否是从“从文件恢复”过程调用的此过程如是刚用选中的文件来恢复
     if deletefile(Product_Dir+data_path) and (copyfile(pchar(now_select),pchar(Product_Dir+data_path),true)) then
     msgstr:='数据库成功恢复到所选状态, 请重新登录系统!' else msgstr:='数据库恢复出错!请检查数据文件或磁盘。';
  except  msgstr:='数据库备份出错!请检查数据文件或磁盘。';  end;
  self.Hide;
  if sender=bitbtn4 then   //判断是否是从“从文件恢复”过程调用的此过程,如果是因为程序会出错则强行中止程序
  begin msgstr:='数据库成功恢复选中的文件,必须立刻重新打开本系统使恢复生效。'; showmessage(msgstr); application.Terminate; end;
  showmessage(msgstr);
  Application.CreateForm(Tdm, dm);      //重新加载数据连接窗体
  close;
  end;

end;

procedure TRestoreDataBase.FormMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
state:='数据库恢复';

end;

procedure TRestoreDataBase.Timer1Timer(Sender: TObject);
begin
if listbox1.ItemIndex=-1 then bitbtn1.Enabled:=false else bitbtn1.Enabled:=true;
if listbox1.Count=0       then bitbtn2.Enabled:=false else bitbtn2.Enabled:=true;
end;

procedure TRestoreDataBase.BitBtn4Click(Sender: TObject);
begin
opendialog1.InitialDir:=Product_Dir;
opendialog1.Execute;
if opendialog1.FileName<>'' then BitBtn1Click(Sender);   //   调用从列表恢复过程
end;

end.

⌨️ 快捷键说明

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