📄 restore.~pas
字号:
unit restore;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBTables, Db, Buttons,FileCtrl;
type
TRestoreFrm = class(TForm)
Panel1: TPanel;
GroupBox1: TGroupBox;
Table1: TTable;
Table2: TTable;
BatchMove1: TBatchMove;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ListBox1: TListBox;
GroupBox2: TGroupBox;
RB_Append: TRadioButton;
RB_Copy: TRadioButton;
Query: TQuery;
Panel2: TPanel;
LDir: TLabel;
SpeedButton1: TSpeedButton;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
FDir:string;
procedure GetDirFile;
//得到数据库服务器日期
Function GetDbServerDate(DBName:string):string;
Function ExecQuery(PQuery:TQuery;PSql:string):Boolean;
public
{ Public declarations }
//表名和电厂编号
FTName:string;
end;
var
RestoreFrm: TRestoreFrm;
implementation
{$R *.DFM}
uses SelectDir;
procedure TRestoreFrm.FormCreate(Sender: TObject);
begin
//数据备份在当前目录下\data子目录
FDir:=ExtractFilePath(ParamStr(0))+'data\'+GetDbServerDate('db_vipdl');
if not DirectoryExists(FDir) then ForceDirectories(FDir);
LDir.Caption:=FDir;
end;
procedure TRestoreFrm.FormShow(Sender: TObject);
begin
GetDirFile;
end;
procedure TRestoreFrm.BitBtn1Click(Sender: TObject);
var i:integer;
p,l:integer;
ftem:string;
begin
for i:=0 to listbox1.Items.Count-1 do
begin
if listbox1.Selected[i] then
begin
table1.TableName:=FTName;
//过滤要导入数据的电厂
table2.Filtered:=true;
table2.DatabaseName:=FDir;
table2.TableName:=listbox1.Items.Strings[i];
p:=pos('.',table2.TableName);
l:=length(table2.TableName);
ftem:=UpperCase(copy(table2.TableName,p+1,l-p+1));
if ftem='DB' then
table2.TableType:=ttParadox
else if ftem='DBF' then
table2.TableType:=ttDBase
else
table2.TableType:=ttASCII;
BatchMove1.Source:=table2;
BatchMove1.Destination:=table1;
if RB_Append.Checked then
BatchMove1.Mode:=batAppendUpdate
else
begin
ExecQuery(Query,'delete from ' + FTName );
BatchMove1.Mode:=batAppend;
end;
try
BatchMove1.Execute;
except
Application.MessageBox('导入登录日志失败!','警告',MB_OKCANCEL+MB_ICONSTOP);
close;
exit;
end;
Application.MessageBox('导入登录日志成功!','警告',MB_OK+MB_ICONEXCLAMATION);
close;
exit;
end;
end;
Application.MessageBox('没有选择文件!','警告',MB_OK+MB_ICONEXCLAMATION);
end;
procedure TRestoreFrm.SpeedButton1Click(Sender: TObject);
var dlg:TSelectDirFrm;
begin
try
dlg:=TSelectDirFrm.Create(self);
if dlg.ShowModal = mrOk then
begin
LDir.Caption:=dlg.label1.Caption;
FDir:=dlg.Label1.Caption;
GetDirFile;
end;
finally
dlg.free;
end;
end;
procedure TRestoreFrm.GetDirFile;
begin
ListBox1.Clear;
if FileExists(FDir+'\'+FTName+'.db') then
ListBox1.Items.Add(FTName+'.db');
if FileExists(FDir+'\'+FTName+'.dbf') then
ListBox1.Items.Add(FTName+'.dbf');
if FileExists(FDir+'\'+FTName+'.txt') then
ListBox1.Items.Add(FTName+'.txt');
end;
function TRestoreFrm.GetDbServerDate(DBName: string): string;
var query:TQuery;
Present: TDateTime;
Year, Month, Day: Word;
str:string;
begin
try
query:=TQuery.Create(nil);
except
exit;
end;
query.DatabaseName:=DBname;
query.close;
query.sql.Clear;
query.sql.Add('select distinct sysdate from dual');
try
query.open;
except
exit;
end;
query.First;
Present:=Query.Fields[0].AsDateTime;
DecodeDate(Present, Year, Month, Day);
str:=inttostr(year);
if month<10 then str:=str+'0'+inttostr(month)
else str:=str+inttostr(month);
if day<10 then str:=str+'0'+inttostr(day)
else str:=str+inttostr(day);
result:=str;
query.free;
end;
function TRestoreFrm.ExecQuery(PQuery: TQuery; PSql: string): Boolean;
begin
Result:=true;
PQuery.close;
PQuery.sql.Clear;
PQuery.Filtered:=false;
PQuery.sql.add(PSql);
try
PQuery.ExecSQL;
except
Result:=false;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -