📄 mainunit.pas
字号:
fedtExpFile.Enabled := False;
fedtExpFile.ColorFlat := clMoneyGreen;
FileStr := 'File='+AppPath+'Backup\Export_'+UserName+FormatDateTime('YYYYMMDD-HHMMSS',Now)+'.dmp';
end
else
begin
fedtExpFile.Enabled := True;
fedtExpFile.ColorFlat := clWhite;
FileStr := 'File='+AppPath+'Backup\'+Trim(fedtExpFile.Text);
end;
end;
procedure TfrmMain.fedtUserNameExit(Sender: TObject);
begin
fbtnExpSQLClick(Sender);
end;
procedure TfrmMain.fedtPasswordExit(Sender: TObject);
begin
fbtnExpSQLClick(Sender);
end;
procedure TfrmMain.fedtSvcNameExit(Sender: TObject);
begin
fbtnExpSQLClick(Sender);
end;
procedure TfrmMain.fbtnImpSQLClick(Sender: TObject);
var
BakupDir : string;
begin
if PageControl1.ActivePageIndex = 1 then
begin
BakupDir := AppPath + 'Bakup\';
if not DirectoryExists(BakupDir) then ForceDirectories(BakupDir);
if fedtUserName2.Text <> '' then UserName := Trim(fedtUserName2.Text);
if fedtUserPassword2.Text <> '' then UserPassword := Trim(fedtUserPassword2.Text);
if fedtScvName2.Text <> '' then UserService := Trim(fedtScvName2.Text);
if fedtImpFile.Text <> '' then
begin
FileStr := 'File='+Trim(fedtImpFile.Text);
ExpLogsFile := Trim(fedtImpFile.Text);
end;
SetOracleClient_Imp;
end;
end;
procedure TfrmMain.fbtnImportClick(Sender: TObject);
var
Year, Month, Day, Hour, Min, Sec, MSec: Word;
CmdLine : string;
ExitCode: DWORD;
ErrMessage, OutMessage: String;
SL : TStringList;
expLogFile : string;
begin
if PageControl1.ActivePageIndex = 1 then
begin
if frbImpCreateUser.Checked then
begin
SQLConn.Params.Clear;
SQLConn.Params.Values['User_Name'] := Trim(fedtUserName2.Text);
SQLConn.Params.Values['Password'] := Trim(fedtUserPassword2.Text);
SQLConn.Params.Values['DataBase'] := Trim(fedtScvName2.Text);
SQLConn.Params.Values['BlobSize'] := '-1';
SQLConn.Params.Values['Oracle TransIsolation'] := 'ReadCommited';
SQLConn.Params.Values['OS Authentication'] := 'False';
Randomize;
SQLConn.ConnectionName:=Trim(fedtScvName2.Text);
SQLConn.DriverName:= 'Oracle';
SQLConn.GetDriverFunc:= 'getSQLDriverORACLE';
SQLConn.VendorLib:= 'oci.dll';
SQLConn.LibraryName:= 'dbexpora.dll';
SQLConn.SQLHourGlass:= True ;
SQLConn.KeepConnection:= False;
try
SQLConn.Open;
except
on E:Exception do
begin
ShowMessage(E.Message);
Exit;
end;
end;
try
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add(' CREATE USER '+ Trim(fedtNewUser.Text)+' ProFile Default IDENTIFIED BY "'+Trim(fedtNewPassword.Text) +'" DEFAULT TABLESPACE USERS ACCOUNT UNLOCK ' );
SQLQuery.ExecSQL ;
except
on E :Exception do
begin
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add(' DROP USER '+ Trim(fedtNewUser.Text)+' CASCADE');
SQLQuery.ExecSQL ;
ShowMessage('导入错误:'+E.Message);
Exit;
end;
end;
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add(' GRANT CONNECT TO '+Trim(fedtNewUser.Text) );
SQLQuery.ExecSQL ;
SQLQuery.SQL.Clear;
SQLQuery.SQL.Add(' GRANT RESOURCE,DBA TO '+Trim(fedtNewUser.Text) );
SQLQuery.ExecSQL ;
end;
fbtnImpSQLClick(Sender);
if not frbImpCreateUser.Checked then
cmdline := cmdstr+' '+UserName+'/'+UserPassword+'@'+UserService+' '+InputMode+' '+IgnoreMode+' '+FileStr
else
cmdline := cmdstr+' '+UserName+'/'+UserPassword+'@'+UserService+' '+InputMode+' '+ToUserMode+' '+IgnoreMode+' '+FileStr;
fbtnExpSQLClick(Sender);
DecodeDateTime(Now, Year, Month, Day, Hour, Min, Sec, MSec);
CoolTrayIcon.ShowBalloonHint('提示', Format('[%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d]', [Year, Month, Day, Hour, Min, Sec]) +
' 开始导入数据......', bitInfo, 10);
Application.ProcessMessages;
//运行导出命令
RunCmdLine(CmdLine, ExitCode, ErrMessage, OutMessage);
//记录日志
Application.ProcessMessages;
expLogFile := ChangeFileExt(ExpLogsFile,'.log');
SL := TStringList.Create;
try
SL.Add('//********************** 导出命令行 *****************************//');
SL.Add('');
SL.Add(CmdLine);
SL.Add('');
SL.Add('//********************** 命令行输出 *****************************//');
SL.Add(OutMessage);
SL.SaveToFile(expLogFile);
finally
FreeAndNil(SL);
end;
DecodeDateTime(Now, Year, Month, Day, Hour, Min, Sec, MSec);
CoolTrayIcon.ShowBalloonHint('提示', Format('[%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d]', [Year, Month, Day, Hour, Min, Sec]) +
' 数据导入完成!', bitInfo, 10);
end;
end;
procedure TfrmMain.SetOracleClient_Imp;
begin
if frbOracle9i2.Checked then
cmdstr := GetOraleHome(False,'');
//cmdstr := 'Imp';
if frbOracle812.Checked then
cmdstr := GetOraleHome(False,'');
//cmdstr := 'Imp';
if frbOracle10g2.Checked then
cmdstr := GetOraleHome(False,'');
//cmdstr := 'Exp80';
if frbImpFull.Checked then
begin
InputMode := 'FULL=Y';
fedtImpUser.Enabled := False;
fedtImpTables.Enabled := False;
fedtImpUser.ColorFlat := clMoneyGreen;
fedtImpTables.ColorFlat := clMoneyGreen;
frbImpCreateUser.Enabled := False;
end
else if frbImpUser.Checked then
begin
InputMode := 'FromUser='+Trim(fedtImpUser.Text);
fedtImpUser.Enabled := True;
fedtImpTables.Enabled := False;
fedtImpUser.ColorFlat := clWhite;
fedtImpTables.ColorFlat := clMoneyGreen;
frbImpCreateUser.Enabled := True;
end
else if frbImpTables.Checked then
begin
InputMode := 'TABLES=('+Trim(fedtImpTables.Text)+')';
fedtImpUser.Enabled := False;
fedtImpTables.Enabled := True;
fedtImpUser.ColorFlat := clMoneyGreen;
fedtImpTables.ColorFlat := clWhite;
frbImpCreateUser.Enabled := True;
end;
if frbImpIgnore.Checked then
begin
IgnoreMode := 'Ignore=Y';
end
else if frbImpCreateUser.Checked then
begin
ToUserMode := 'ToUser='+Trim(fedtNewUser.Text);
fedtNewUser.Enabled := True;
fedtNewPassword.Enabled := True;
fedtNewUser.ColorFlat := clWhite;
fedtNewPassword.ColorFlat := clWhite;
end;
//写入脚本
AddSQLScript_Imp;
end;
procedure TfrmMain.frbImpFullClick(Sender: TObject);
begin
SetOracleClient_Imp;
end;
procedure TfrmMain.frbImpUserClick(Sender: TObject);
begin
SetOracleClient_Imp;
end;
procedure TfrmMain.frbImpTablesClick(Sender: TObject);
begin
SetOracleClient_Imp;
end;
procedure TfrmMain.fbtnImportFileClick(Sender: TObject);
begin
OpenDialog.Filter := 'DMP文件(*.DMP)|*.DMP';
if OpenDialog.Execute and (OpenDialog.FileName <> '') then
begin
fedtImpFile.Text := OpenDialog.FileName;
end;
fbtnImport.Enabled := True;
end;
procedure TfrmMain.SetDataInputMode;
begin
if frbImpIgnore.Checked then
begin
fedtNewUser.Enabled := False;
fedtNewPassword.Enabled := False;
fedtNewUser.ColorFlat := clMoneyGreen;
fedtNewPassword.ColorFlat := clMoneyGreen;
end
else
begin
fedtNewUser.Enabled := True;
fedtNewPassword.Enabled := True;
fedtNewUser.ColorFlat := clWhite;
fedtNewPassword.ColorFlat := clWhite;
end;
end;
procedure TfrmMain.frbImpIgnoreClick(Sender: TObject);
begin
SetDataInputMode;
end;
procedure TfrmMain.frbImpCreateUserClick(Sender: TObject);
begin
SetDataInputMode;
end;
procedure TfrmMain.fedtUserName2Exit(Sender: TObject);
begin
fbtnImpSQLClick(Sender);
end;
procedure TfrmMain.fedtUserPassword2Exit(Sender: TObject);
begin
fbtnImpSQLClick(Sender);
end;
procedure TfrmMain.fedtScvName2Exit(Sender: TObject);
begin
fbtnImpSQLClick(Sender);
end;
procedure TfrmMain.PageControl1Change(Sender: TObject);
begin
UserName := '';
UserPassword := '';
UserService := '';
FileStr := '';
ExpLogsFile := '';
fmeoExpSQL.Clear;
if PageControl1.ActivePageIndex = 3 then
begin
imgTemp := TImage.Create(Application);
DrawText;
UpdateText;
Timer1.Enabled:=True;
end;
end;
procedure TfrmMain.DrawText;
const
RowHeight=20;
var s:array [0..6,0..1] of string;
SRec:TSearchRec;
m,i,h,w : Integer;
begin
FindFirst(Application.ExeName,faAnyFile,SRec);
s[0,0]:='Version:';
s[0,1]:='Oracle10g、9i定时导入导出工具V1.0';
s[1,0]:='Aim:';
s[1,1]:='平时使用命令行备份Oracle比较繁琐,故写了个小程序,';
s[2,1]:= ' 同时也是为了纪念MyGirl--申瑞 ';
s[3,1]:= ' 将要回到我的身边!!! ';
s[4,0]:='Author:';
s[4,1]:='胡东风';
s[5,0]:='QQ:';
s[5,1]:='515141273';
s[6,0]:='E-MAIL:';
s[6,1]:='guitianerhu@163.com';
with imgTemp do
begin
Width:=image2.Width;
Height:=image2.Height+RowHeight*7;
Canvas.Pen.Color:=clGray;
Canvas.Brush.Color:=clGray;
Canvas.Font.Color:=clWhite;
Canvas.Font.Size := 10;
Canvas.Rectangle(0,0,Width,Height);
m:=Width div 3;
h:=image2.Height;
for i:= 0 to 6 do
begin
w:=Canvas.TextWidth(s[i,0]);
Canvas.TextOut(m-w-30,h,s[i,0]);
Canvas.TextOut(m-20,h,s[i,1]);
h:=h+RowHeight;
end;
end;
end;
procedure TfrmMain.UpdateText;
var
rect: TRect;
begin
rect.Top := FTop;
rect.Left := 0;
rect.Right := image2.Width;
rect.Bottom := FTop + image2.Height;
image2.Canvas.CopyRect(image2.ClientRect, imgTemp.Canvas, rect);
end;
procedure TfrmMain.Timer1Timer(Sender: TObject);
begin
FTop:=FTop+1;
if FTop > imgTemp.Height then FTop := 0;
UpdateText;
end;
procedure TfrmMain.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled := False;
end;
procedure TfrmMain.Image2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Timer1.Enabled := True;
end;
procedure TfrmMain.Timer2Timer(Sender: TObject);
var
Year, Month, Day, Hour, Min, Sec, MSec: Word;
OutDir, ExpOutFile, ExpLogFile: String; //文件输出目录,实际备份文件,日志文件
Cmd: String; //命令行
ExitCode: DWORD;
ErrMessage, OutMessage: String;
SL: TStringList;
begin
DecodeDateTime(Now, Year, Month, Day, Hour, Min, Sec, MSec);
if Format('%2.2d:%2.2d', [Hour, Min]) = LeftStr(RunTime, 5) then
begin
//如果输出目录不存在则创建,Exp.exe程序不能够自动创建目录
OutDir := ExtractFilePath(BakupFile);
if not DirectoryExists(OutDir) then ForceDirectories(OutDir);
//*********构造命令行***************
Cmd := ExpExeFile;
if Pos(' ', Cmd) > 0 then Cmd := '"' + Cmd + '"';
Cmd := Cmd + ' ' + UserName + '/' + UserPassword + '@' + UserService;
if AutoNamed then
begin
//在文件的主名后加上 时间
ExpOutFile := OutDir + ChangeFileExt(ExtractFileName(BakupFile), '')+'_'+UserName +'_'+Format('%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d', [Year, Month, Day, Hour, Min, Sec]) + ExtractFileExt(BakupFile);
end
else ExpOutFile := BakupFile;
Cmd := Cmd + ' File=' + ExpOutFile;
if Grants then Cmd := Cmd + ' grants=Y'
else Cmd := Cmd + ' grants=N';
if Full then Cmd := Cmd + ' Full=Y'
else Cmd := Cmd + ' Full=N';
if Indexes then Cmd := Cmd + ' Indexes=Y'
else Cmd := Cmd + ' Indexes=N';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -