BDE Konfiguration

    • Offizieller Beitrag

    Hi,
    falls ihr ab und an dBase-Dateien in Excel laden wollt und ihr bekommt 'ne Fehlermeldung: "..unbekanntes Datenformat.." oder ähnlich, dann kann die Ursache dafür in einer fehlerhaften Einstellung der Borland Database Engine liegen.
    Z.B. sind Telefonbuch-CD's mit steinalten BDE-Versionen ausgestattet, die bei jedem Start die BDE-Einstellungen zerschießen.
    Hatte das Problem in der Firma, dass ich aus meiner Fachanwendung plötzlich keine Reports in Excel öffnen konnte und hab ewig gesucht, bis ich heraus gefunden habe, dass fehlerhafte BDE-Einstellungen die Ursache waren.
    Entstanden ist daraus dieses Tool:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #Include <GuiListView.au3>
    Dim $type = "REG_SZ", $succ = 0, $succComp = 0
    Dim $keyVersion = "HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\INIT"
    Dim $valNameVersion = "VERSION"
    Dim $valVersion = "4.0"
    Dim $keyLang = "HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\INIT"
    Dim $valNameLang = "LANGDRIVER"
    Dim $valLang = "DB850DE0"
    Dim $keyLevel = "HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine\Settings\DRIVERS\DBASE\TABLE CREATE"
    Dim $valNameLevel = "LEVEL"
    Dim $valLevel = "5"
    Dim $arStatusReg[3], $status
    Dim $steelblue = 0xB0C4DE, $khaki = 0xF0E68C, $violet = 0x800080, $rot = 0xFF0000
    Dim $txt = @LF & @LF & "Sollten sich dBase-Dateien nicht im Excel öffnen lassen"& @LF & "(..unbekanntes Datenformat..), " & _
    "so ist vermutlich eine fehlerhafte Einstellung der Borland Database Engine die Ursache." & @LF & @LF & _
    "Dieses Programm überprüft die Einstellungen und paßt sie ggf. an."
    Dim $txtChg = "Es müssen Einstellungen geändert werden."
    Dim $txtNoChg = "Die Einstellungen sind korrekt. - Keine Änderungen."

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

    ; Start GUI
    $Form1 = GUICreate("AForm1", 356, 257, -1, -1, BitOR($WS_POPUP, $WS_BORDER))
    GUISetBkColor($steelblue)
    $Input1 = GUICtrlCreateInput("Konfiguration der Borland Database Engine", 8, 8, 340, 22, BitOR ($ES_CENTER,$ES_AUTOHSCROLL,$ES_READONLY))
    GUICtrlSetFont(-1, 9, 800, 0, "Verdana")
    GUICtrlSetColor(-1, $violet)
    GUICtrlSetBkColor(-1, $khaki)
    $Label1 = GUICtrlCreateLabel($txt, 8, 45, 340, 120, BitOR($SS_CENTER,$SS_SUNKEN))
    GUICtrlSetBkColor(-1, $khaki)
    $ret1 = _GUICtrlCreateColorButton("Weiter", 8, 180, 90, 25, $khaki, $violet)
    $btnRun = $ret1[0]
    $ret2 = _GUICtrlCreateColorButton("Abbrechen", 258, 180, 90, 25, $khaki, $violet)
    $btnEnd = $ret2[0]
    $Input2 = GUICtrlCreateInput("© BugFix 2007 ( Colored Button by rakudave )", 8, 226, 340, 22, BitOR($ES_CENTER,$ES_AUTOHSCROLL,$ES_READONLY))
    GUICtrlSetBkColor(-1, $khaki)
    GUICtrlSetFont(-1, 9, 550, 0, "Verdana")
    GUICtrlSetColor(-1, $violet)
    ; GUI Settings
    $Form2 = GUICreate("AForm2", 365, 201, -1, -1, BitOR($WS_POPUP,$WS_BORDER))
    GUISetBkColor($steelblue)
    $ListView1 = GUICtrlCreateListView("Parameter|IST - Wert|SOLL - Wert", 12, 11, 337, 105, -1, BitOR($WS_EX_CLIENTEDGE,$LVS_EX_GRIDLINES))
    GUICtrlSetBkColor(-1, $khaki)
    _GUICtrlListViewSetColumnWidth(-1, 0, 111)
    _GUICtrlListViewSetColumnWidth(-1, 1, 108)
    _GUICtrlListViewSetColumnWidth(-1, 2, 108)
    $ListView1_0 = GUICtrlCreateListViewItem("VERSION", $ListView1)
    $ListView1_1 = GUICtrlCreateListViewItem("", $ListView1)
    $ListView1_2 = GUICtrlCreateListViewItem("LANGDRIVER", $ListView1)
    $ListView1_3 = GUICtrlCreateListViewItem("", $ListView1)
    $ListView1_4 = GUICtrlCreateListViewItem("LEVEL", $ListView1)
    $Label2 = GUICtrlCreateLabel("", 12, 129, 337, 20, BitOR($SS_CENTER,$SS_CENTERIMAGE,$SS_SUNKEN))
    GUICtrlSetBkColor(-1, $khaki)
    GUICtrlSetColor(-1, $rot)
    GUICtrlSetFont(-1, 9, 550, 0, "Verdana")
    $ret3 = _GUICtrlCreateColorButton("Weiter", 12, 164, 90, 25, $khaki, $violet)
    $btnWeiter = $ret3[0]
    $ret4 = _GUICtrlCreateColorButton("Abbrechen", 260, 164, 90, 25, $khaki, $violet)
    $btnEsc = $ret4[0]
    GUISetState(@SW_SHOW, $Form1)
    GUICtrlSetState(8, $GUI_FOCUS)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $btnEnd
    GUICtrlSetStyle($btnEnd, $SS_ETCHEDFRAME)
    Sleep(150)
    GUICtrlSetStyle($btnEnd, $SS_NOTIFY + $SS_GRAYRECT)
    Sleep(100)
    Exit
    Case $btnRun
    GUICtrlSetStyle($btnRun, $SS_ETCHEDFRAME)
    Sleep(150)
    GUICtrlSetStyle($btnRun, $SS_NOTIFY + $SS_GRAYRECT)
    Sleep(100)
    _readReg()
    ExitLoop
    EndSwitch
    WEnd
    GUIDelete($Form1)
    GUISetState(@SW_SHOW, $Form2)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $btnEsc
    GUICtrlSetStyle($btnEsc, $SS_ETCHEDFRAME)
    Sleep(150)
    GUICtrlSetStyle($btnEsc, $SS_NOTIFY + $SS_GRAYRECT)
    Sleep(100)
    Exit
    Case $btnWeiter
    GUICtrlSetStyle($btnWeiter, $SS_ETCHEDFRAME)
    Sleep(150)
    GUICtrlSetStyle($btnWeiter, $SS_NOTIFY + $SS_GRAYRECT)
    Sleep(100)
    If $status <> 0 Then _writeReg($arStatusReg[0], $arStatusReg[1], $arStatusReg[2])
    ExitLoop
    EndSwitch
    WEnd
    Exit

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

    Func _readReg()
    Dim $var
    $var = RegRead($keyVersion, $valNameVersion)
    _GUICtrlListViewSetItemText($ListView1, 0, 1, $var)
    _GUICtrlListViewSetItemText($ListView1, 0, 2, $valVersion)
    If $var = $valVersion Then
    $arStatusReg[0] = 0
    Else
    $arStatusReg[0] = 1
    EndIf
    $var = RegRead($keyLang, $valNameLang)
    _GUICtrlListViewSetItemText($ListView1, 2, 1, $var)
    _GUICtrlListViewSetItemText($ListView1, 2, 2, $valLang)
    If $var = $valLang Then
    $arStatusReg[1] = 0
    Else
    $arStatusReg[1] = 1
    EndIf
    $var = RegRead($keyLevel, $valNameLevel)
    _GUICtrlListViewSetItemText($ListView1, 4, 1, $var)
    _GUICtrlListViewSetItemText($ListView1, 4, 2, $valLevel)
    If $var = $valLevel Then
    $arStatusReg[2] = 0
    Else
    $arStatusReg[2] = 1
    EndIf
    $status = $arStatusReg[0] + $arStatusReg[1] + $arStatusReg[2]
    If $status = 0 Then
    GUICtrlSetData($Label2, $txtNoChg)
    Else
    GUICtrlSetData($Label2, $txtChg)
    EndIf
    EndFunc

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

    Func _writeReg($ver=1, $lang=1, $level=1)
    Select
    Case $ver = 1
    $succComp += 1
    If RegWrite($keyVersion, $valNameVersion, $type, $valVersion) = 1 Then $succ += 1
    Case $lang = 1
    $succComp += 1
    If RegWrite($keyLang, $valNameLang, $type, $valLang) = 1 Then $succ += 1
    Case $level = 1
    $succComp += 1
    If RegWrite($keyLevel, $valNameLevel, $type, $valLevel) = 1 Then $succ += 1
    EndSelect
    If $succ = $succComp Then
    MsgBox(262208, "Borland Database Settings", "Änderungen erfolgreich übernommen.")
    Else
    MsgBox(262160, "Borland Database Settings", "Fehler, Änderungen konnten nicht übernommen werden!" & @LF & _
    "Bitte überprüfen Sie, ob Ihr Account über ausreichende Berechtigungen zum Ändern der Registry verfügt.")
    EndIf
    EndFunc

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

    ;=============================================================================
    ;
    ; Function Name: _GUICtrlCreateColorButton()
    ;
    ; Description: Creates a colored Button
    ;
    ; Syntax: _GUICtrlCreateColorButton($text, $left, $top, $width, $height,$bkcolor[,$fontcolor])
    ;
    ; Parameter(s); $text = The text of the control
    ; $left = The left side of the control
    ; $top = The top of the control
    ; $width = The width of the control
    ; $height = The height of the control
    ; $bkcolor = Backgroundcolor of the control
    ; $fontcolor = [optional] Fontcolor of the control
    ;
    ; Return Value(s): array[1] = used to change colors
    ; array[0] = notifies GUIGetMsg if user clicks
    ;
    ; Author: rakudave <[email='rakudave@gmx.net'][/email]>
    ;=============================================================================
    Func _GUICtrlCreateColorButton($text, $left, $top, $width, $height, $bkcolor, $fontcolor = -1)
    Local $colbut[2]
    If $fontcolor == -1 Then $fontcolor = 0x000000
    $colbut[0] = GUICtrlCreateLabel("", $left, $top, $width, $height, $SS_BLACKRECT)
    GUICtrlCreateLabel("", $left, $top, $width - 1, $height - 1, $SS_WHITERECT)
    GUICtrlCreateLabel("", $left + 1, $top + 1, $width - 2, $height - 2, $SS_GRAYRECT)
    $colbut[1] = GUICtrlCreateLabel($text, $left + 1, $top + 1, $width - 3, $height - 3, $SS_NOTIFY & $SS_CENTER)
    GUICtrlSetBkColor(-1, $bkcolor)
    GUICtrlSetColor(-1, $fontcolor)
    GUICtrlSetFont(-1, 9, 600, 0, "Verdana")
    Return $colbut
    EndFunc ;==>_GUICtrlCreateColorButton

    [/autoit]