#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <Guilistview.au3>
#include <WindowsConstants.au3>

$Datum = @YEAR & '-' & @MON  & '-' & @MDAY
$Sprungmarke = True
$Packen = True
$move = True

While $Sprungmarke
	
MsgBox(64+262144, "Exportieren einer Datenbank", "Mit diesem Tool können sie einen Dump eines Datenbankbenutzer erstellen." )

;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
Local $orcluservar = IniRead(@ScriptDir & "\export.ini", "orcluser", "orcluser", "")
;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		

$orcluser = InputBox ( "Export" , "Geben sie den Benutzer für Oracle an:" , $orcluservar , "" , 250, 150 )
	If @Error = 1 then
		MsgBox(0+48, "Abbruch" , "Der Export wurde abgeborchen!" &@CRLF& "Das Programm wird geschlossen!" )
		;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
		IniWrite ( @ScriptDir & "\export.ini" , "orcluser" , "orcluser" , "" & $orcluser & "" )
		;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		
		Exit
	Endif

	;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
	IniWrite ( @ScriptDir & "\export.ini" , "orcluser" , "orcluser" , "" & $orcluser & "" )
	;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		
	
;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
Local $orclpasswordvar = IniRead(@ScriptDir & "\export.ini", "orclpassword", "orclpassword", "")
;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)

$orclpassword = InputBox ( "Export" , "Geben sie das Passwort für Oracle an:" , $orclpasswordvar , "*" , 250, 150 )
	If @Error = 1 then
		MsgBox(0+48, "Abbruch" , "Der Export wurde abgeborchen!" &@CRLF& "Das Programm wird geschlossen!" )
		;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
		IniWrite ( @ScriptDir & "\export.ini" , "orclpassword" , "orclpassword" , "" & $orclpassword & "" )
		;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		
		Exit
	Endif

	;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
	IniWrite ( @ScriptDir & "\export.ini" , "orclpassword" , "orclpassword" , "" & $orclpassword & "" )
	;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)			

;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
Local $servervar = IniRead(@ScriptDir & "\export.ini", "server", "server", "")
;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		

$server = InputBox ( "Export" , "Geben sie den Namen oder die IP-Adresse des Servers an:" , $servervar , "" , 250, 150 )
	If @Error = 1 then
		MsgBox(0+48, "Abbruch" , "Der Export wurde abgeborchen!" &@CRLF& "Das Programm wird geschlossen!" )
		;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
		IniWrite ( @ScriptDir & "\export.ini" , "server" , "server" , "" & $server & "" )
		;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		
		Exit
	Endif

	;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
	IniWrite ( @ScriptDir & "\export.ini" , "server" , "server" , "" & $server & "" )
	;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		

	Local $orcl, $xe, $msg, $ok, $cancel
    GUICreate("Datenbank-System", 225, 140)
	GUICtrlSetFont(-1, 9, 400, 0, "Tahoma")
    GUISetState()
	
	$orcl		= GUICtrlCreateRadio("ORCL",  25, 10, 75, 25)
				GUICtrlSetFont(-1, 9, 400, 0, "Tahoma")

	$xe			= GUICtrlCreateRadio("XE", 125, 10, 50, 25)
				GUICtrlSetFont(-1, 9, 400, 0, "Tahoma")
				
	$Sonstiges	= GUICtrlCreateLabel("Sonstiges:", 25, 40, 175, 25)
				GUICtrlSetFont(-1, 9, 400, 0, "Tahoma")

	$inputs 	= GUICtrlCreateInput("", 25, 65, 175, 25)
				GUICtrlSetFont(-1, 9, 400, 0, "Tahoma")

	$ok			= GUICtrlCreateButton ("OK" , 25, 100, 80, 25, 0)
				GUICtrlSetFont(-1, 9, 400, 0, "Tahoma")

	$cancel		= GUICtrlCreateButton ("Abbrechen" , 120, 100, 80, 25, 0)
				GUICtrlSetFont(-1, 9, 400, 0, "Tahoma")

    While 1
        $msg = GUIGetMsg()
		If $msg = $GUI_EVENT_CLOSE Or $Msg = $ok Then ExitLoop GUISetState (@SW_HIDE)
		If $msg = $cancel Then Exit GUISetState (@SW_HIDE) MsgBox(0+48, "Abbruch" , "Der Export wurde abgeborchen!" &@CRLF& "Das Programm wird geschlossen!" )
        Select
            Case $msg = $GUI_EVENT_CLOSE
                ExitLoop
            Case $msg = $orcl And BitAND(GUICtrlRead($orcl), $GUI_CHECKED) = $GUI_CHECKED
                $dbsys = "ORCL"
					;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
					IniWrite ( @ScriptDir & "\export.ini" , "dbsys" , "dbsys" , "" & $dbsys & "" )
					;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)
			Case $msg = $xe And BitAND(GUICtrlRead($xe), $GUI_CHECKED) = $GUI_CHECKED
                $dbsys = "XE"
					;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
					IniWrite ( @ScriptDir & "\export.ini" , "dbsys" , "dbsys" , "" & $dbsys & "" )
					;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)
			Case $msg = $inputs
                $dbsys = ""& GUICtrlRead($inputs) &""
					;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
					IniWrite ( @ScriptDir & "\export.ini" , "dbsys" , "dbsys" , "" & $dbsys & "" )
					;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)
		EndSelect

	WEnd

;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
Local $ownervar = IniRead(@ScriptDir & "\export.ini", "owner", "owner", "")
;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		

$owner = InputBox ( "Export" , "Welcher Benutzer soll exportiert werden? " , $ownervar , "" , 250, 150 )
	If @Error = 1 then
		MsgBox(0+48, "Abbruch" , "Der Export wurde abgeborchen!" &@CRLF& "Das Programm wird geschlossen!" )
		;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
		IniWrite ( @ScriptDir & "\export.ini" , "owner" , "owner" , "" & $owner & "" )
		;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)
		Exit
	Endif
	
	;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
	IniWrite ( @ScriptDir & "\export.ini" , "owner" , "owner" , "" & $owner & "" )
	;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)

;IniFileEncrypt(@ScriptDir & "\export.nrbt",@ScriptDir & "\export.ini",1)
Local $folderpathvar = IniRead(@ScriptDir & "\export.ini", "folderpath", "folderpath", "")
;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)		

	$folderpath = FileSelectFolder( "Wählen sie den Speicherort für den Dump aus." , "" , $folderpathvar )
		If @error Then
			MsgBox(0+48, "Abbruch" , "Der Export wurde abgeborchen!" &@CRLF& "Das Programm wird geschlossen!" )
			IniWrite ( @ScriptDir & "\export.ini" , "folderpath" , "folderpath" , "" & $folderpath & "" )
			;IniFileDecrypt(@ScriptDir & "\export.ini",@ScriptDir & "\export.nrbt",1)
		EndIf

Run ("exp " & $orcluser & "/" & $orclpassword & "@" & $server & ":1521/" & $dbsys & " owner=" & $owner & " file=" & $folderpath & "\" & $owner & "-" & $Datum & ".dmp log=" & $folderpath & "\" & $owner & "-" & $Datum & ".log triggers=n statistics=none")
ProcessWaitClose ( "exp.exe" )
MsgBox(64+262144, "Export" , "Die Datenbank wurde exportiert" )

$verify = MsgBox(4+32+262144, "Packen" , "Möchten sie die erstellten Dateien packen?" &@CRLF& "Nach dem packen, werden die erstellten Dateien *.dmp und *.log gelöscht!" ) 
If $verify = 6 Then

	FileInstall("C:\temp\7za.exe", "7za.exe")

	Run ( "7za a " & $folderpath & "\" & $owner & "-" & $Datum & " " & $folderpath & "\" & $owner & "-" & $Datum & ".dmp " & $folderpath & "\" & $owner & "-" & $Datum & ".log" )
	ProcessWaitClose ( "7za.exe" )
	FileDelete("" & $folderpath & "\" & $owner & "-" & $Datum & ".dmp")
	FileDelete("" & $folderpath & "\" & $owner & "-" & $Datum & ".log")
	FileDelete("7za.exe")
ElseIf $verify = 7 Then     
	$Packen = False
					
EndIf

	If MsgBox( 4+32+262144, "Export", "Möchten sie einen weiteren Datenbankbenutzer exportieren?" ) = 6 Then ContinueLoop
	$Sprungmarke = False

WEnd

	Func IniFileDecrypt($sFilepath,$sFilepathDecrypted,$sCryptkey)
			FileWrite($sFilepathDecrypted,_StringEncrypt(1,FileRead($sFilepath),$sCryptkey))
			FileDelete($sFilepath)
	EndFunc	
	
	Func IniFileEncrypt($sFilepath,$sFilepathDecrypted,$sCryptkey)
        FileDelete($sFilepathDecrypted)
        $sUncryptIniContent = _StringEncrypt(0,FileRead($sFilepath),$sCryptkey)
        FileDelete($sFilepath)
        FileWrite($sFilepathDecrypted,$sUncryptIniContent)
	EndFunc	