- 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
#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."
; 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)
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
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
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
;=============================================================================
;
; 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