Funktionen reichtig benutzen ???

  • Ich bastel gerade ein Script was das remote Sichern / Wiederherstellen con MSSQL Datenbanken erleichtern/automatisieren soll?

    Nun sind 2 Funktionen bis auf eine Änderung gleich.

    Backup: eine Funktion für mit Endung *.bak eine Funktion für mit Endung *.tmp

    Restore: eine Funktion für mit Endung *.bak eine Funktion für mit Endung *.tmp


    Da ich zwischen den Testläufen die Temp DB wiederherstellen muss und nur zu Beginn die Bak finde ich es über die Funktion zu duplizieren und umzubenennen. Das geht doch sicher geschickter ;)


    [autoit]

    Func db_backup()
    $_srv=IniRead ($ini, $_dsn, "DB-Server", "" )
    $_db= IniRead ($ini, $_dsn, "DB-Name", "" )
    $_bak=StringLeft(IniRead ($ini, $_dsn, "MDF-Dateiname", "" ), StringInStr(IniRead ($ini, $_dsn, "MDF-Dateiname", "" ), '\', 0, -1 ) ) & $_db & "-Statistiktest.bak"
    FileDelete($log)
    RunWait($script_dir & "osql -U user -P pass -S " & $_srv & " -Q " & '"' & "backup DATABASE " & $_db & " to DISK = '" & $_bak & "' with init" & '" ' & "-o " & $log)

    [/autoit][autoit][/autoit][autoit]

    If FileReadLine($log,-1) = "BACKUP DATABASE wird fehlerbedingt beendet." Then
    Run('explorer.exe /select, "' & $log &'"')
    Exit
    Else
    MsgBox(0,"Datenbank:"& $_db,"Backup " & FileReadLine($log,-1),10)
    EndIf
    EndFunc

    [/autoit]

    ich muss eigentlich nur die Endung ändern :(

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Ist wirklich ganz einfach. Der Funktion einen Parameter übergeben, so wie hier:

    Spoiler anzeigen
    [autoit]

    Func db_backup($ext)
    $_srv = IniRead($ini, $_dsn, "DB-Server", "")
    $_db = IniRead($ini, $_dsn, "DB-Name", "")
    $_bak = StringLeft(IniRead($ini, $_dsn, "MDF-Dateiname", ""), StringInStr(IniRead($ini, $_dsn, "MDF-Dateiname", ""), '\', 0, -1)) & $_db & "-Statistiktest." & $ext
    FileDelete($log)
    RunWait($script_dir & "osql -U user -P pass -S " & $_srv & " -Q " & '"' & "backup DATABASE " & $_db & " to DISK = '" & $_bak & "' with init" & '" ' & "-o " & $log)

    [/autoit] [autoit][/autoit] [autoit]

    If FileReadLine($log, -1) = "BACKUP DATABASE wird fehlerbedingt beendet." Then
    Run('explorer.exe /select, "' & $log & '"')
    Exit
    Else
    MsgBox(0, "Datenbank:" & $_db, "Backup " & FileReadLine($log, -1), 10)
    EndIf
    EndFunc ;==>db_backup

    [/autoit]

    Dann einfach mit db_backup("bak") oder db_backup("tmp") aufrufen.

    Viel Erfolg :)

  • @TrueMu ja sowas suchte ich manche Sachen schnallt man erst wenn man es "richtig" benutzt.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • verdammt ich hatte heute noch ein Beispiel geschrieben, wo ich eine Frage zu hatte, nun ist es weg.

    Und den Titel hatte ich auch korrigiert ???? Auf ein neues... :rock:

    [autoit]


    ;ausserhalb der Funktion:
    Dim $dwhdb_time_y =_ArrayCreate(2,"01.01.2007", "01.01.2008");down
    Dim $dwhdb_time_m =_ArrayCreate(3,"01.11.2007", "01.12.2007", "01.01.2008")
    Dim $dwhdb_time_d =_ArrayCreate(4,"28.11.2007", "29.11.2007", "30.11.2007", "01.12.2007");up
    ;Aufruf
    If GUICtrlRead($dwhdb_1)=1 Then dwhdb_1($dwhdb_time_y[0], $dwhdb_time_y[$i], '"{Down}!g"')
    ;Funktion:
    Func dwhdb_1($dwhdb_cnt, $dwhdb_time, $key)
    ;MsgBox(0,$dwhdb_cnt,$dwhdb_time & $key,5)
    Send("{TAB}{Enter}")
    for $i =1 to $dwhdb_cnt
    ;~ for $i =1 to 2
    ;~ for $i =1 to $dwhdb_time_y[0] ; funktionierte aber dann brauche ich dieses Script dreimal :(
    Sleep(800)
    ControlFocus("DWH Umschlagsstatistiken erzeugen","",29)
    Send("{DEL 10}")
    Send("{BS 10}")
    Sleep(800)
    ControlSend("DWH Umschlagsstatistiken erzeugen","", 29, $dwhdb_time & "{TAB}")
    Send($key)
    ;~ ControlSend("DWH Umschlagsstatistiken erzeugen","", 29, $dwhdb_time_y[$i] & "{TAB}")
    ;~ Send("{Down}!g")
    ;~ Send("{ENTER}")
    If ProcessExists("LISdwhDBUmschlagA.exe") Then ProcessWaitClose("LISdwhDBUmschlagA.exe")
    Next
    dwhdb_Ende()
    EndFunc

    [/autoit]


    Warum geht das nicht so wie oben :S , bevor ich ´weiter rumstochere geht das überhaupt :)

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    2 Mal editiert, zuletzt von Dietmar (16. Juni 2008 um 17:43)

  • da so nicht weitergekomen bin werde ich nun die Werte auch in die Ini schreiben.

    Vermutlich schiesse ich aber schon wieder mit Kanonen auf Spatzen :)

    [autoit]

    Auszug aus der Ini
    [dwhdb_J]
    Jahr_1=01.01.2007
    Jahr_2=01.01.2008
    [dwhdb_M]
    Monat_1=01.11.2007
    Monat_2=01.12.2007
    Monat_3=01.01.2008
    [dwhdb_T]
    Tag_1=28.11.2007
    Tag_2=29.11.2007
    Tag_3=30.11.2007
    Tag_4=01.12.2007

    [/autoit]

    Das Script muss nun 9* mit den verschieden Werten durchlazufen werden.

    mit

    [autoit]

    for $i = 1 to UBound(IniReadSection($ini,"dwhdb_J")) - 1

    [/autoit]

    kann ich das Script 2* laufen lassen, wie kome ich aber an die eigentlichen Werte die ja mit iniread für die ganze Sektion schon ausgelesen wurden.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • [autoit]

    $a=IniReadSection($ini,"dwhdb_J")
    MsgBox(0,"",$a[0][0])
    for $i = 1 to UBound($a) - 1
    MsgBox(0,"",$a[$i][1])
    Next

    [/autoit]

    so gehts danke, ich hatte es erst so probiert $a[$i] probiert :(

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o