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

📄 mainunit.pas

📁 一个简单的ORACLE 转换工具,可以解决不少实际问题哦
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    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 + -