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

📄 mainunit.pas

📁 一个简单的ORACLE 转换工具,可以解决不少实际问题哦
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit MainUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, TFlatTabControlUnit, TFlatEditUnit, ImgList,
  ComCtrls, TFlatGroupBoxUnit, TFlatRadioButtonUnit, TFlatComboBoxUnit,
  TFlatButtonUnit, TFlatSplitterUnit, TFlatPanelUnit, TFlatMemoUnit,
  TFlatHintUnit, Menus, CoolTrayIcon, TFlatCheckBoxUnit, DBXpress, FMTBcd,
  DB, SqlExpr, Buttons, ztvregister, ztvBase, ztvZip,DateUtils,StrUtils,IniFiles,Registry,
  ADODB,TlHelp32;

type
  TfrmMain = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    ImageList1: TImageList;
    FlatGroupBox1: TFlatGroupBox;
    frbOracle9i1: TFlatRadioButton;
    frbOracle811: TFlatRadioButton;
    frbOracle10g1: TFlatRadioButton;
    FlatGroupBox2: TFlatGroupBox;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    fedtUserName: TFlatEdit;
    fedtPassword: TFlatEdit;
    fedtSvcName: TFlatEdit;
    FlatPanel1: TFlatPanel;
    FlatGroupBox3: TFlatGroupBox;
    frbExpFull: TFlatRadioButton;
    frbExpUser: TFlatRadioButton;
    frbExpTable: TFlatRadioButton;
    FlatGroupBox4: TFlatGroupBox;
    FlatSplitter1: TFlatSplitter;
    FlatSplitter2: TFlatSplitter;
    FlatGroupBox5: TFlatGroupBox;
    Label3: TLabel;
    Label4: TLabel;
    Label2: TLabel;
    fbtnExpSQL: TFlatButton;
    fbtnExport: TFlatButton;
    fedtExpUser: TFlatEdit;
    fedtExpTables: TFlatEdit;
    fedtExpFile: TFlatEdit;
    FlatHint1: TFlatHint;
    FlatGroupBox7: TFlatGroupBox;
    frbOracle9i2: TFlatRadioButton;
    frbOracle812: TFlatRadioButton;
    frbOracle10g2: TFlatRadioButton;
    FlatGroupBox8: TFlatGroupBox;
    Label1: TLabel;
    Label5: TLabel;
    Label9: TLabel;
    fedtUserName2: TFlatEdit;
    fedtUserPassword2: TFlatEdit;
    fedtScvName2: TFlatEdit;
    FlatPanel2: TFlatPanel;
    FlatSplitter3: TFlatSplitter;
    FlatSplitter4: TFlatSplitter;
    FlatGroupBox9: TFlatGroupBox;
    frbImpFull: TFlatRadioButton;
    frbImpUser: TFlatRadioButton;
    frbImpTables: TFlatRadioButton;
    FlatGroupBox10: TFlatGroupBox;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    fedtImpUser: TFlatEdit;
    fedtImpTables: TFlatEdit;
    fedtImpFile: TFlatEdit;
    FlatGroupBox11: TFlatGroupBox;
    fbtnImpSQL: TFlatButton;
    fbtnImport: TFlatButton;
    frbImpIgnore: TFlatRadioButton;
    frbImpCreateUser: TFlatRadioButton;
    Label13: TLabel;
    Label14: TLabel;
    fedtNewUser: TFlatEdit;
    fedtNewPassword: TFlatEdit;
    CoolTrayIcon: TCoolTrayIcon;
    ImageList2: TImageList;
    PoMinfo: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    fbtnImportFile: TFlatButton;
    fcbGetFileName: TFlatCheckBox;
    OpenDialog: TOpenDialog;
    SQLQuery: TSQLQuery;
    FlatPanel3: TFlatPanel;
    FlatGroupBox12: TFlatGroupBox;
    fmeoExpSQL: TFlatMemo;
    FlatGroupBox6: TFlatGroupBox;
    FlatGroupBox13: TFlatGroupBox;
    FlatGroupBox14: TFlatGroupBox;
    FlatPanel4: TFlatPanel;
    FlatButton1: TFlatButton;
    FlatGroupBox15: TFlatGroupBox;
    Label15: TLabel;
    fedtTimeUserName: TFlatEdit;
    Label16: TLabel;
    fedtTimerUserPass: TFlatEdit;
    Label17: TLabel;
    fedtTimerUserScv: TFlatEdit;
    Panel1: TPanel;
    Timer1: TTimer;
    Image2: TImage;
    Label18: TLabel;
    EdtExpExeFile: TEdit;
    BtnExpExeFile: TBitBtn;
    BtnExpExeFileD: TSpeedButton;
    Label19: TLabel;
    edtBakupPath: TEdit;
    btnBakUpD: TBitBtn;
    btnBakup: TSpeedButton;
    chkZIPFile: TFlatCheckBox;
    chkFullFile: TFlatCheckBox;
    chkGrants: TFlatCheckBox;
    chkIndexes: TFlatCheckBox;
    chkConstraints: TFlatCheckBox;
    chkAutoNamed: TFlatCheckBox;
    Label20: TLabel;
    EdtRunTime: TDateTimePicker;
    Timer2: TTimer;
    ZipComponent: TZip;
    N3: TMenuItem;
    N4: TMenuItem;
    SQLConn: TSQLConnection;
    Label21: TLabel;
    fcbIncType: TFlatComboBox;
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure CoolTrayIconMouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    procedure fbtnExpSQLClick(Sender: TObject);
    procedure frbExpFullClick(Sender: TObject);
    procedure frbExpUserClick(Sender: TObject);
    procedure frbExpTableClick(Sender: TObject);
    procedure fbtnExportClick(Sender: TObject);
    procedure fcbGetFileNameClick(Sender: TObject);
    procedure fedtUserNameExit(Sender: TObject);
    procedure fedtPasswordExit(Sender: TObject);
    procedure fedtSvcNameExit(Sender: TObject);
    procedure fbtnImpSQLClick(Sender: TObject);
    procedure fbtnImportClick(Sender: TObject);
    procedure frbImpFullClick(Sender: TObject);
    procedure frbImpUserClick(Sender: TObject);
    procedure frbImpTablesClick(Sender: TObject);
    procedure fbtnImportFileClick(Sender: TObject);
    procedure frbImpIgnoreClick(Sender: TObject);
    procedure frbImpCreateUserClick(Sender: TObject);
    procedure fedtUserName2Exit(Sender: TObject);
    procedure fedtUserPassword2Exit(Sender: TObject);
    procedure fedtScvName2Exit(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Image2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Timer2Timer(Sender: TObject);
    procedure BtnExpExeFileClick(Sender: TObject);
    procedure btnBakUpDClick(Sender: TObject);
    procedure BtnExpExeFileDClick(Sender: TObject);
    procedure btnBakupClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FlatButton1Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FileHandle : THandle;
    ConfigFile: String;
    ExpExeFile, BakupFile,ExpLogsFile: String;
    RunTime: String;
    Grants, Full, Ziped, AutoNamed,Indexes,Constraints: Boolean;
    procedure SysButtonMsg(var Msg: TMessage); message WM_SYSCOMMAND;
    procedure ReadConfig;
    procedure WriteConfig;
    procedure SetConfig(InMem: Boolean);
  public
    { Public declarations }
     cmdstr,InputMode,OutPutMode,IgnoreMode,ToUserMode :string;
     UserName,UserPassword,UserService : string;
     FileStr : string;
      //关于的操作
    imgTemp: TImage;
    FTop: Integer;
    procedure AddSQLScript_Exp;
    procedure AddSQLScript_Imp;
    procedure SetOracleClient_Exp;
    procedure SetOracleClient_Imp;
    procedure SetDataInputMode;
    procedure UpdateText;  //更新显示信息
    procedure DrawText;  //画显示信息
    //导出程序
    function GetOraleHome(CanExp : Boolean;strStyle:string): String;
    procedure RunCmdLine(const Cmd: String; var ExitCode: DWORD; var ErrMessage: String; var OutMessage: String);
    procedure WriteToFile(const FileName, Content: String);
    //退出进程
    procedure EndProcess(AExeName:string);
  end;

var
  frmMain: TfrmMain;
  AppPath : string;

implementation

{$R *.dfm}

procedure TfrmMain.N1Click(Sender: TObject);
begin
  CoolTrayIcon.ShowMainForm;
end;

procedure TfrmMain.N2Click(Sender: TObject);
begin
  if PageControl1.ActivePageIndex = 0 then
    EndProcess('exp.exe')
  else if PageControl1.ActivePageIndex = 1 then
    EndProcess('imp.exe')
  else if PageControl1.ActivePageIndex = 2 then
    EndProcess('exp.exe');
  Application.Terminate;
end;

procedure TfrmMain.CoolTrayIconMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  if Assigned(PoMinfo) then
    if not PoMinfo.AutoPopup then
      MessageDlg('The popup menu is disabled.', mtInformation, [mbOk], 0);
end;

procedure TfrmMain.fbtnExpSQLClick(Sender: TObject);
var
  BakupDir : String;
begin
 if PageControl1.ActivePageIndex = 0 then
 begin
   BakupDir := AppPath + 'Bakup\';
   //如果没有Bakup文件夹,则自动创建
   if not DirectoryExists(BakupDir) then ForceDirectories(BakupDir);

  if fedtUserName.Text <> '' then
    UserName := Trim(fedtUserName.Text);
  if fedtPassword.Text <> '' then
    UserPassword := Trim(fedtPassword.Text);
   if fedtSvcName.Text <> '' then
    UserService := Trim(fedtSvcName.Text);

  {if trim(LogStr) = '' then
    LogStr := 'Log='+BakupDir+'Exp_'+UserName+'_'+FormatDateTime('YYYYMMDD-HHMMSS',Now)+'.log';}

  if fcbGetFileName.Checked then
  begin
    fedtExpFile.Enabled := False;
    fedtExpFile.ColorFlat := clMoneyGreen;
    FileStr := 'File='+BakupDir+'Exp_'+UserName+'_'+FormatDateTime('YYYYMMDD-HHMMSS',Now)+'.dmp';
    ExpLogsFile := BakupDir+'Exp_'+UserName+'_'+FormatDateTime('YYYYMMDD-HHMMSS',Now)+'.dmp';
  end
  else
  begin
    fedtExpFile.Enabled := True;
    fedtExpFile.ColorFlat := clWhite;
    FileStr := 'File='+BakupDir+'Exp_'+Trim(fedtExpFile.Text)+'_'+FormatDateTime('YYYYMMDD-HHMMSS',Now)+'.dmp';
    ExpLogsFile := BakupDir+'Exp_'+UserName+'_'+FormatDateTime('YYYYMMDD-HHMMSS',Now)+'.dmp';
  end;

   SetOracleClient_Exp;
 end;
end;

procedure TfrmMain.AddSQLScript_Exp; //导出文件脚本
begin
  fmeoExpSQL.Clear;
  fmeoExpSQL.Text := cmdstr+' '+UserName+'/'+UserPassword+'@'+UserService+' '+OutputMode+' '+FileStr;
end;

procedure TfrmMain.AddSQLScript_Imp;
begin
  fmeoExpSQL.Clear;
  fmeoExpSQL.Text := cmdstr+' '+UserName+'/'+UserPassword+'@'+UserService+' '+InputMode+' '+IgnoreMode+' '+ToUserMode+' '+FileStr;
end;

procedure TfrmMain.SetOracleClient_Exp;
begin
  if frbOracle10g1.Checked then
    cmdstr := GetOraleHome(True,'');
  if frbOracle9i1.Checked then
    cmdstr := GetOraleHome(True,'');
  if frbOracle811.Checked then
    cmdstr := GetOraleHome(True,'');

  if frbExpFull.Checked then
  begin
    OutPutMode := 'FULL=Y';
    fedtExpUser.Enabled := False;
    fedtExpTables.Enabled := False;
    fedtExpUser.ColorFlat := clMoneyGreen;
    fedtExpTables.ColorFlat := clMoneyGreen;
  end
  else if frbExpUser.Checked then
  begin
    OutPutMode := 'Owner=('+Trim(fedtExpUser.Text)+')';
    fedtExpUser.Enabled := True;
    fedtExpTables.Enabled := False;
    fedtExpUser.ColorFlat := clWhite;
    fedtExpTables.ColorFlat := clMoneyGreen;
  end
  else if frbExpTable.Checked then
  begin
    OutPutMode := 'TABLES=('+Trim(fedtExpTables.Text)+')';
    fedtExpUser.Enabled := False;
    fedtExpTables.Enabled := True;
    fedtExpUser.ColorFlat := clMoneyGreen;
    fedtExpTables.ColorFlat := clWhite;
  end;

  //写入脚本
  AddSQLScript_Exp;
end;

procedure TfrmMain.frbExpFullClick(Sender: TObject);
begin
  SetOracleClient_Exp;
end;

procedure TfrmMain.frbExpUserClick(Sender: TObject);
begin
  SetOracleClient_Exp;
end;

procedure TfrmMain.frbExpTableClick(Sender: TObject);
begin
  SetOracleClient_Exp
end;

procedure TfrmMain.fbtnExportClick(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 = 0 then
  begin
    //导出SQL
    fbtnExpSQLClick(Sender);
    //CmdLine := cmdstr +' '+USERNAME+'/'+userPassword+'@'+UserService+' '+OutPutMode+' '+FileStr+' '+LogStr;
    CmdLine := cmdstr +' '+USERNAME+'/'+userPassword+'@'+UserService+' '+OutPutMode+' '+FileStr;
    
    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.fcbGetFileNameClick(Sender: TObject);
begin
  if fcbGetFileName.Checked then
  begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -