📄 restore.pas
字号:
unit restore;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ToolWin,ExtCtrls,buttons, ADODB, ImgList,
Mask, Grids, IniFiles,DBGrids,myclass, DB;
type
TRestoreForm = class(TForm)
GroupBox1: TGroupBox;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
RadioButton3: TRadioButton;
ComboBox1: TComboBox;
MaskEdit1: TMaskEdit;
GroupBox2: TGroupBox;
DBGrid1: TDBGrid;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
StaticText1: TStaticText;
OpenDialog1: TOpenDialog;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
ProgressBar1: TProgressBar;
procedure CreateParams(var Params: TCreateParams); override;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure StaticText1Click(Sender: TObject);
procedure StaticText1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StaticText1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RadioButton2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
procedure RadioButton3Click(Sender: TObject);
procedure MaskEdit1KeyPress(Sender: TObject; var Key: Char);
procedure DBGrid1CellClick(Column: TColumn);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
private
procedure WMPAINT1(var msg:TMESSAGE);message WM_PAINT;
procedure WMNCPAINT1(var msg:TWMNCPAINT);message WM_NCPAINT;
procedure Active(var msg:Tmessage);message WM_ACTIVATE;
procedure WMNCLBUTTONDBLCLK1(var msg:Tmessage);message WM_NCLBUTTONDBLCLK;
{ Private declarations }
public
titleBmp:Tbitmap;
path:string;
Position:integer;
setini:TINIFILe;
{ Public declarations }
end;
implementation
uses MainForm,DataModule;
{$R *.dfm}
function MyShowmessage(text:Pchar):boolean; external 'resource.dll';
procedure TRestoreForm.WMNCLBUTTONDBLCLK1(var msg:Tmessage);
begin
//
end;
procedure TRestoreForm.Active(var msg:Tmessage);
begin
self.WMPAINT1(msg);
end;
procedure TRestoreForm.CreateParams(var Params: TCreateParams);
begin
inherited;
params.Style:=params.Style-WS_SYSMENU;
end;
procedure TRestoreForm.WMPAINT1(var msg:TMESSAGE);
begin
sendmessage(self.Handle,WM_NCPAINT,0,0);
inherited;
end;
procedure TRestoreForm.WMNCPAINT1(var msg:TWMNCPAINT);
var
dc1:HDC;
y,frame:integer;
oldbrush:HBrush;
oldpen,pen:HPEN;
canvas:Tcanvas;
begin
canvas:=Tcanvas.Create;
dc1:=getwindowdc(Handle);
y:=GetSystemMetrics(SM_CYSIZE);
frame:=GetSystemMetrics(SM_CYSIZEFRAME);
oldbrush:=selectobject(dc1,getstockobject(null_brush));
pen:=createpen(PS_SOLID,1,rgb(155,155,155));
oldpen:=selectobject(dc1,pen);
RoundRect(dc1,0,0,Width,Height,12,12);
pen:=createpen(PS_SOLID,frame*2-5,rgb(255,255,255));
selectobject(dc1,pen);
RoundRect(dc1,2,2,Width-2,Height-2,8,10);
StretchBlt(dc1,frame,frame,Width-2*frame,y+frame div 2,titlebmp.Canvas.Handle,0,0,titlebmp.Width,titlebmp.Height,srccopy);
canvas.Handle:=dc1;
canvas.Brush.Style:=bsclear;
canvas.TextOut(frame*3,(y-frame)div 2,self.Caption);
selectobject(dc1,oldbrush);
selectobject(dc1,oldpen);
deleteObject(pen);
canvas.Handle:=0;
canvas.Free;
releasedc(Handle,dc1);
end;
procedure TRestoreForm.FormCreate(Sender: TObject);
begin
setini:=Tinifile.Create(main.dir+'\system.ini');
edit1.Text:=setini.ReadString('BackupPath','path',main.dir+'\backup.dat');
titlebmp:=Tbitmap.Create;
titlebmp.LoadFromResourceName(main.resource,'TItle');
end;
procedure TRestoreForm.FormDestroy(Sender: TObject);
begin
data.PublicQuery.Filtered:=false;
setini.Free;
end;
procedure TRestoreForm.StaticText1Click(Sender: TObject);
begin
if opendialog1.execute then
begin
edit1.Text:=opendialog1.FileName;
formshow(self);
end;
end;
procedure TRestoreForm.StaticText1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
statictext1.BevelKind:=BKsoft;
end;
procedure TRestoreForm.StaticText1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
statictext1.BevelKind:=bkflat;
end;
procedure TRestoreForm.RadioButton2Click(Sender: TObject);
begin
with data.PublicQuery do
begin
close;
sql.Clear;
try
sql.Add('RESTORE HEADERONLY from disk='''+edit1.Text+'''');
open;
except
myshowmessage('备份数据打开时发生错误!!');
exit;
end;
try
data.PublicQuery.Filter:='[backupfinishdate]>'+''''+maskedit1.Text+''''+'and [backupfinishdate]<'+''''+datetimetostr(strtodatetime(maskedit1.Text)+1)+'''';
data.PublicQuery.Filtered:=true;
except
myshowmessage('请给出正确的时间!');
data.PublicQuery.filtered:=false;
exit;
end;
if recordcount<1 then
begin
myshowmessage('对不起! 没有你所需要的备份资料');
speedbutton1.Enabled:=false;
exit;
end
else
if recordcount>1 then
begin
myshowmessage('在您输入的日期中有多个备份纪录,请在下面的表格中选择一个适当的纪录!');
speedbutton1.Enabled:=true;
self.Height:=340;
end
else
begin
position:=fieldbyname('position').AsInteger;
speedbutton1.Enabled:=true;
end;
end;
end;
procedure TRestoreForm.FormShow(Sender: TObject);
var
i:integer;
begin
combobox1.clear;
self.Height:=220;
with data.PublicQuery do
begin
close;
sql.Clear;
try
sql.Add('RESTORE HEADERONLY from disk='''+edit1.Text+'''');
open;
except
myshowmessage('打开数据备份时发生错误!');
exit;
end;
while not eof do
begin
if not fieldbyname('backupname').IsNull then
begin
for i:=0 to combobox1.Items.Count do
begin
if combobox1.Items.Strings[i] <> fieldbyname('backupname').AsString then
Continue
else
break;
end;
if (i = Combobox1.Items.Count+1) or (i=1) then
combobox1.items.add(fieldbyname('backupname').AsString);
end;
next;
end;
last;
position:=fieldbyname('position').AsInteger;
end;
combobox1.ItemIndex:=0;
end;
procedure TRestoreForm.ComboBox1KeyPress(Sender: TObject; var Key: Char);
begin
key:=#0;
end;
procedure TRestoreForm.RadioButton3Click(Sender: TObject);
begin
if (trim(combobox1.Text) <> '') then
begin
with data.PublicQuery do
begin
close;
sql.Clear;
sql.Add('RESTORE HEADERONLY from disk='''+edit1.Text+'''');
open;
try
data.PublicQuery.Filter:='[backupname]='+''''+combobox1.Text+'''';
data.PublicQuery.Filtered:=true;
except
myshowmessage('数据出错!!');
data.PublicQuery.Filtered:=false;
exit;
end;
if recordcount<1 then
begin
myshowmessage('对不起! 没有您所需要的备份资料');
exit;
end
else if recordcount>1 then
begin
myshowmessage('在您输入的条件中有多个备份记录,请在下面的表格中选择一个适当的记录!');
self.Height:=340;
end
else
position:=fieldbyname('position').AsInteger;
speedbutton1.Enabled:=true;
end;
end;
end;
procedure TRestoreForm.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key=#13) and radiobutton2.Checked then
begin
try
strtodate(maskedit1.Text);
except
myshowmessage('请输入正确的时间!!');
exit;
end;
RadioButton2Click(radiobutton2);
end;
end;
procedure TRestoreForm.DBGrid1CellClick(Column: TColumn);
begin
if data.PublicQuery.Active then
begin
with data.PublicQuery do
begin
position:=fieldbyname('Position').AsInteger;
speedbutton1.Enabled:=True;
end;
end;
end;
procedure TRestoreForm.SpeedButton2Click(Sender: TObject);
begin
data.PublicQuery.Close;
close;
end;
procedure TRestoreForm.SpeedButton1Click(Sender: TObject);
var
restore:Trestorethread;
begin
restore:=Trestorethread.Create(true);
restore.sender:=progressbar1;
restore.Position:=inttostr(position);
restore.folder:=edit1.Text;
restore.command:=data.ADOCommand1;
restore.parent:=self;
progressbar1.Visible:=true;
restore.Resume;
restore.StaticSynchronize(restore,restore.restore);
end;
procedure TRestoreForm.RadioButton1Click(Sender: TObject);
begin
speedbutton1.Enabled:=True;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -