?? sysrestore.~pas
字號:
unit sysrestore;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBTables, Db, Buttons,FileCtrl;
type
TSysRestoreFrm = 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;
FilterComboBox1: TFilterComboBox;
Label1: TLabel;
Label2: TLabel;
LDir: TLabel;
SpeedButton1: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FilterComboBox1Change(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
FDir:string;
fext:string;
Function IsHaveDcid(pTable:TTable;pDcid:string):Boolean;
Function ExecQuery(PQuery:TQuery;PSql:string):Boolean;
//得到數據庫服務器日期
Function GetDbServerDate(DBName:string):string;overload;
public
{ Public declarations }
end;
var
SysRestoreFrm: TSysRestoreFrm;
implementation
{$R *.DFM}
uses xt_sjhf_frm_main,SelectDir;
procedure TSysRestoreFrm.FilterComboBox1Change(Sender: TObject);
begin
xt_sjhf_main.qry_TB_XTGL_FACB.DisableControls;
ListBox1.Clear;
if FilterComboBox1.Mask ='*.DB' then
fext:='.DB'
else if FilterComboBox1.Mask ='*.DBF' then
fext:='.DBF'
else
fext:='.TXT';
xt_sjhf_main.qry_TB_XTGL_FACB.First;
while not xt_sjhf_main.qry_TB_XTGL_FACB.Eof do
begin
if FileExists(FDir+'\'+xt_sjhf_main.qry_TB_XTGL_FACB.fieldbyname('BYWM').asstring+fext) then
ListBox1.Items.Add(xt_sjhf_main.qry_TB_XTGL_FACB.fieldbyname('BZWM').asstring);
xt_sjhf_main.qry_TB_XTGL_FACB.Next;
end;
xt_sjhf_main.qry_TB_XTGL_FACB.EnableControls;
end;
procedure TSysRestoreFrm.FormShow(Sender: TObject);
begin
FilterComboBox1Change(nil);
end;
procedure TSysRestoreFrm.BitBtn1Click(Sender: TObject);
var n:integer;
fsql:string;
FTName:string;
begin
xt_sjhf_main.qry_TB_XTGL_FACB.DisableControls;
//設置備份方式為拷貝
BatchMove1.Mode:=batCopy;
table2.DatabaseName:=FDir;
//計算要備份的表的個數
FSql:='select count(*) from T_XTGL_FACB where FABH ='''+xt_sjhf_main.Edit_fabh.Text+'''';
xt_sjhf_main.Query.close;
xt_sjhf_main.Query.sql.Clear;
if xt_sjhf_main.qry_TB_XTGL_FACB.Filtered then
fsql:=fsql+ ' and ('+ xt_sjhf_main.qry_TB_XTGL_FACB.Filter+')';
xt_sjhf_main.Query.sql.Add(fsql);
xt_sjhf_main.Query.Prepare;
xt_sjhf_main.Query.open;
xt_sjhf_main.Query.First;
xt_sjhf_main.qry_TB_XTGL_FACB.First;
while not xt_sjhf_main.qry_TB_XTGL_FACB.Eof do
begin
FTName:=xt_sjhf_main.qry_TB_XTGL_FACB.fieldbyname('BYWM').asstring;
Table1.close;
table1.TableName:=FTName;
//過濾要導入數據的電廠
if not FileExists(FDir+'\'+FTName+fext) then
begin
xt_sjhf_main.qry_TB_XTGL_FACB.Next;
continue;
end;
Table2.close;
table2.DatabaseName:=FDir;
table2.TableName:=FTname+fext;
table2.Filter:='';
table2.Filtered:=false;
//覆蓋時用
fsql:='delete from '+FTName;
//if IsHaveDcid(Table1,'DCID') then
// begin
table2.Filtered:=true;
//如果有DCID 則刪覆蓋表時要過濾
fsql:='delete from ' + FTName ;
//end;
if FilterComboBox1.Mask='*.DB' then
table2.TableType:=ttParadox
else if FilterComboBox1.Mask='*.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,fsql);
BatchMove1.Mode:=batAppend;
end;
try
BatchMove1.Execute;
except
Application.MessageBox('恢復數據失敗!','警告',MB_OK+MB_ICONSTOP);
xt_sjhf_main.qry_TB_XTGL_FACB.EnableControls;
close;
exit;
end;
xt_sjhf_main.qry_TB_XTGL_FACB.Next;
end;
xt_sjhf_main.qry_TB_XTGL_FACB.EnableControls;
Application.MessageBox('恢復數據成功!','警告',MB_OK+MB_ICONEXCLAMATION);
close;
exit;
end;
procedure TSysRestoreFrm.FormCreate(Sender: TObject);
begin
//數據備份在當前目錄下\data子目錄
FDir:=ExtractFilePath(ParamStr(0))+'data\'+GetDbServerDate('db_vipdl');
if not DirectoryExists(FDir) then ForceDirectories(FDir);
LDir.Caption:=FDir;
end;
Function TSysRestoreFrm.IsHaveDcid(pTable:TTable;pDcid:string):Boolean;
var i:integer;
begin
result:=false;
if not pTable.Active then
try
pTable.Active:=true;
except
exit;
end;
for i:=0 to pTable.FieldCount - 1 do
begin
if pTable.Fields[i].FieldName = pDcid then
begin
result:=true;
break;
end;
end;
end;
procedure TSysRestoreFrm.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;
FilterComboBox1Change(nil);
end;
finally
dlg.free;
end;
end;
function TSysRestoreFrm.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;
function TSysRestoreFrm.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');
//query.Prepare;
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;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -