Nabend
ich muss mein Script wohl nun unvollendet vorstellen. Ich musste auch ein paar Sachen entkernen
da ich es für meine Arbeit(skollgen) und mich gebastelt habe. Hoffe das die eigentliche Funktion nicht darunter gelitten hat.
Sinn und Zweck des Programmes ist eine simple DSN Konfiguration zu ermöglichen.
Quasi das schnelle Finden und Einrichten von Datenbankverbindungen, momentan MSSQL.
Bzw. Löschen vorhandener Datenquellen. Gegenprüfen der hinterlegten ist noch nicht enthalten.
Prinzipiell funktioniert das meiste aber ich finde einen Fehler nicht und komme da nicht weiter,
bei der Gelegenheit könnte ich noch ein paar Unschönheiten erfragen?
Nun gut Ihr seid gewarnt....
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\Charlie-Brown-2.ico
#AutoIt3Wrapper_outfile=odbc-generator.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=Ermitteln der vorhandenen Datenbanken von hinterlegten Servern und Importdatei generieren
#AutoIt3Wrapper_Res_Description=Regdatei für DSNs generieren
#AutoIt3Wrapper_Res_Fileversion=0.1.0.97
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=p
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_Field=ProductName|ODBC-Generator
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.2.13.10 (beta)
Author: Dietmar R.
Script Function: Ermitteln der vorhandenen Datenbanken von hinterlegten Servern
Anzeigen der Datenbanken in einer Liste zur Auswahl
Regdatei generieren für Import auf den ASP Servern
select TOP(1)UpText,UpDatum from SysUpd order by Cnt desc
[/autoit] [autoit][/autoit] [autoit]select name,
case status
when 32 then 'loading'
when 128 then 'recovering'
when 512 then 'offline'
when 4096 then 'single user'
when 64 then 'pre recovery'
when 256 then 'not recovered'
else 'Normal'
end
from sysdatabases
where name not in('master','msdb','model','tempdb','reportserver','reportservertempdb','datacomsqlaudit','pubs','distribution','northwind')
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListBox.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <array.au3>
#include <ComboConstants.au3> ;für Combobox disablen
#include <C:\Autoit_SVN\UDF\MS-SQL.au3>
;~ #include <c:\Autoit_SVN\UDF\RegFunc.au3>
#include <c:\Autoit_SVN\UDF\LV_Format.au3>
;~ #RequireAdmin ;kann man machen ich finde den UAC Dialog aber abstossend
[/autoit] [autoit][/autoit] [autoit]Dim $DB_User = "DBUSER"
Dim $DB_Pass = "DBPASS"
Dim $DB_Server
;~ Dim $DB_Server_Port
;~ Dim $DB_Server_Array
;~ Dim $DB_Name
Dim $Script_Dir = @ScriptDir
Dim $DB_Server_Default
Dim $Reg_Writeable
;~ Bedingungen für Programmstart / Ablauf prüfen (Ini etc)
;~-------------------------------------------------------------------------------------------------------------------------------
If StringRight($Script_Dir,1) <> "\" Then $Script_Dir &= "\"
;~ If Not FileExists($Script_Dir & "odbc-generator.ini") Then FileInstall("C:\AutoIT_SVN\Eigene Scripte\Dietmar\ODBC-Generator\odbc-generator.ini", $Script_Dir & "odbc-generator.ini")
;~ If Not FileExists(@TempDir & "\AutoIt-Tools-Updater.exe") Then FileInstall("C:\AutoIT_SVN\Eigene Scripte\Dietmar\AutoIt-Tools-Updater\AutoIt-Tools-Updater.exe", @TempDir & "\AutoIt-Tools-Updater.exe")
;~ $UpdateDir = IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","UpdateDir","")
;~ If $UpdateDir <> "" And IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","PrgUpdate",0) = 1 Then RunWait(@TempDir & '\AutoIt-Tools-Updater.exe "' & $Script_Dir & '" "' & @ScriptName & '" "' & $UpdateDir & '"')
;~ FileDelete(@TempDir & "\AutoIt-Tools-Updater.exe")
[/autoit] [autoit][/autoit] [autoit]$DB_Server_Choice = "Datenbank-Server intern|ASP Datenbank-Server|Eigene Auswahl|Komplette Liste"
$DB_Server_Default = IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","Server-Standardfilter","")
If Not StringInStr($DB_Server_Choice, $DB_Server_Default) Or $DB_Server_Default = "" Then $DB_Server_Default = "Datenbank-Server intern"
$DB_Filter_Default = IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","DB-Standardfilter","")
If $DB_Filter_Default = "" Then $DB_Filter_Default = "Alle Datenbanken"
$DB_Filter_Choice = "Alle Datenbanken|DB* (ASP Kunden)|WebT|WebS|"
If Not StringInStr($DB_Filter_Choice, $DB_Filter_Default) Or $DB_Filter_Default = "" Then $DB_Filter_Choice = $DB_Filter_Choice & $DB_Filter_Default
$DSN_Name_Default = IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","DSN-Standardfilter","")
If $DSN_Name_Default = "" Then $DSN_Name_Default = "DSN = [Datenbank]"
$DSN_Name_Choice = "DSN = [Datenbank]|DSN = [Datenbank]-[Server]|DSN = [Server]-[Datenbank]|DSN = ASP-[Datenbank]|DSN = FIRMA-[Datenbank]|DSN = intern-[Datenbank]|DSN = lokal-[Datenbank]|"
If Not StringInStr($DSN_Name_Choice, $DSN_Name_Default) Or $DSN_Name_Default = "" Then $DSN_Name_Choice = $DSN_Name_Choice & $DSN_Name_Default
$Backup_Dir = IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","Backup-Dir","")
If $Backup_Dir = "" Then $Backup_Dir = @MyDocumentsDir & "\Backup-ODBC\"
Global $g_eventerror = 0 ; to be checked to know if com error occurs. Must be reset after handling.
[/autoit] [autoit][/autoit] [autoit]$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; Install a custom error handler
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];~ GUI für Programmstart / Ablauf
;~-------------------------------------------------------------------------------------------------------------------------------
_Test_ODBC() ; Prüfen ob HKLM änderbar ist
If $CmdLine[0] = 0 Then ; Prüfen ob das Programm mit Parametern aufgerufen wurde
[/autoit] [autoit][/autoit] [autoit]$Form1_1 = GUICreate("ODBC - Generator", 1024, 768,1,1,$WS_SIZEBOX + $WS_SYSMENU + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX);, 193, 115) ; Start GUI
$Tab1 = GUICtrlCreateTab(0, 20, 1980, 27)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKTOP + $GUI_DOCKLEFT)
$TabSheet1 = GUICtrlCreateTabItem("Auswählbare und existierende Datenquellen")
$Group_Links_Tab1 = GUICtrlCreateGroup("", 10, 50, 500, 685)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUICtrlCreateLabel("Konfigurierbare MSSQL-Datenquellen", 16, 65)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKTOP + $GUI_DOCKLEFT)
$Button_SelectAll_Tab1 = GUICtrlCreateButton("Alles markieren?", 360, 65, 113, 17, 0)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKTOP + $GUI_DOCKHCENTER)
$ListView_Label_Tab1 = "DSN-Name|Datenbankserver|Datenbankname|DB-Collation|Status"
$ListView_DSN_DB_Tab1 = GUICtrlCreateListView($ListView_Label_Tab1, 15, 90, 490, 573,$LVS_REPORT)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
$hListView_DSN_DB_Tab1 = GUICtrlGetHandle($ListView_DSN_DB_Tab1)
_Resize_Collum($hListView_DSN_DB_Tab1)
GUICtrlCreateLabel("Suchbereich festlegen: ", 35, 675, -1, 30)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
$Combo_DB_Range_Tab1 = GUICtrlCreateCombo("",30,700,140,25, $CBS_DROPDOWNLIST)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUICtrlSetData($Combo_DB_Range_Tab1,$DB_Server_Choice,$DB_Server_Default)
$Button_Refresh_Server_Tab1 = GUICtrlCreateButton("#", 153, 675, 17, 17)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUICtrlCreateLabel("Bildungsregeln für DSN ", 185, 675, -1, 30)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
$Combo_DSN_Name_Tab1 = GUICtrlCreateCombo("",180,700,160,25)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUICtrlSetData($Combo_DSN_Name_Tab1,$DSN_Name_Choice,$DSN_Name_Default)
$Button_Refresh_DSN_Tab1 = GUICtrlCreateButton("#", 323, 675, 17, 17)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUICtrlCreateLabel("Datenbank Filter: ", 355, 675, -1, 30)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
$Combo_DB_Filter_Tab1 = GUICtrlCreateCombo("",350,700,120,25)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUICtrlSetData($Combo_DB_Filter_Tab1,$DB_Filter_Choice,$DB_Filter_Default)
$Button_Refresh_DB_Tab1 = GUICtrlCreateButton("#", 453,675, 17, 17)
GUICtrlSetResizing(-1, $GUI_DOCKSIZE + $GUI_DOCKBOTTOM + $GUI_DOCKLEFT)
GUICtrlCreateGroup("", -99, -99, 1, 1) ; Ende Auswahl linke Seite
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$Group_Rechts_Tab1 = GUICtrlCreateGroup("", 514, 50, 500, 685)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER)
GUICtrlCreateLabel("System DSN:", 520, 65, 67, 17)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKBOTTOM + $GUI_DOCKHCENTER)
$Button_System_Valid_Tab1 = GUICtrlCreateButton("DSN validieren", 650, 65, 113, 17, 0)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
$Check_System_Del_Tab1 = GUICtrlCreateCheckbox("", 840, 65, 17, 17)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKSIZE + $GUI_DOCKRIGHT)
$Button_System_Del_Tab1 = GUICtrlCreateButton("markierte löschen?", 872, 65, 113, 17, 0)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKSIZE + $GUI_DOCKRIGHT)
$ListView_System_Tab1 = GUICtrlCreateListView("€|DSN-Name|Datenbankserver|Datenbankname|DB-Collation|Status", 520, 90, 489, 264,$LVS_REPORT)
GUICtrlSetResizing(-1, $GUI_DOCKTOP + $GUI_DOCKHCENTER)
$hListView_System_Tab1 = GUICtrlGetHandle($ListView_System_Tab1)
_Resize_Collum($hListView_System_Tab1)
GUICtrlCreateLabel("User DSN:", 520, 374, 55, 17)
GUICtrlSetResizing(-1, $GUI_DOCKVCENTER)
$Button_User_Valid_Tab1 = GUICtrlCreateButton("DSN validieren", 650, 374, 113, 17, 0)
GUICtrlSetResizing(-1, $GUI_DOCKVCENTER + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
$Check_User_Del_Tab1 = GUICtrlCreateCheckbox("", 840, 374, 17, 17)
GUICtrlSetResizing(-1, $GUI_DOCKVCENTER + $GUI_DOCKSIZE + $GUI_DOCKRIGHT)
$Button_User_Del_Tab1 = GUICtrlCreateButton("markierte löschen?", 872, 374, 113, 17, 0)
GUICtrlSetResizing(-1, $GUI_DOCKVCENTER + $GUI_DOCKSIZE + $GUI_DOCKRIGHT)
$ListView_User_Tab1 = GUICtrlCreateListView("€|DSN-Name|Datenbankserver|Datenbankname|DB-Collation|Status", 520, 399, 489, 264,$LVS_REPORT)
GUICtrlSetResizing(-1, $GUI_DOCKVCENTER + $GUI_DOCKBOTTOM)
$hListView_User_Tab1 = GUICtrlGetHandle($ListView_User_Tab1)
_Resize_Collum($hListView_User_Tab1)
$Button_Import_Tab1 = GUICtrlCreateButton("GO", 550, 680,35,35)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
$Radio_HKLM_Reg_Tab1 = GUICtrlCreateRadio('"System-Datenquellen erzeugen."',620,675,-1,30)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
$Radio_HKCU_Reg_Tab1 = GUICtrlCreateRadio('"Benutzer-Datenquellen erzeugen."',620,700,-1,30)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
$Check_Do_Backup_Tab1 = GUICtrlCreateCheckbox("Backup erzeugen",820,675,-1,30)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
If IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","Backup","") = 1 Then GUICtrlSetState(-1,$GUI_CHECKED)
$Check_Change_DSN_Tab1 = GUICtrlCreateCheckbox("Datenquellen überschreiben?",820,700,-1,30)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
If IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","DSN-überschreiben","") = 1 Then GUICtrlSetState(-1,$GUI_CHECKED)
$Button_Save_Tab1 = GUICtrlCreateButton("...", 955, 680,20,20)
GUICtrlSetResizing(-1, $GUI_DOCKBOTTOM + $GUI_DOCKSIZE + $GUI_DOCKHCENTER)
Local $aHWnd_Tab1[3] = [$hListView_DSN_DB_Tab1,$hListView_System_Tab1,$hListView_User_Tab1]
[/autoit] [autoit][/autoit] [autoit]If $Reg_Writeable = "yes" Then
If IniRead($Script_Dir & "odbc-generator.ini","Konfiguration","Reg-Ziel","") = "HKLM" Then GUICtrlSetState($Radio_HKLM_Reg_Tab1,$GUI_CHECKED)
Else
GUICtrlSetState($Radio_HKCU_Reg_Tab1,$GUI_CHECKED)
GUICtrlSetState($Radio_HKLM_Reg_Tab1,$GUI_DISABLE)
GUICtrlSetState($Check_System_Del_Tab1,$GUI_DISABLE)
GUICtrlSetState($Button_System_Del_Tab1,$GUI_DISABLE)
GUICtrlSetState($Button_System_Valid_Tab1,$GUI_DISABLE)
EndIf
_GUICtrlListView_Formatting_Startup($Form1_1, $aHWnd_Tab1)
_Fill_System_DSN_Listbox("HKEY_LOCAL_MACHINE",$ListView_System_Tab1)
_Fill_System_DSN_Listbox("HKEY_CURRENT_USER",$ListView_User_Tab1)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$TabSheet2 = GUICtrlCreateTabItem("Schnellanlage einer einzelnen Datenquelle")
$TabSheet3 = GUICtrlCreateTabItem("Schnellanlage von Oracle Datenquellen")
$TabSheet4 = GUICtrlCreateTabItem("Konfiguration und weitere Optionen")
$TabSheet5 = GUICtrlCreateTabItem("Hilfe / Info - ODBC-Generator")
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_GETMINMAXINFO, '_WM_GETMINMAXINFO') ; gehört zur Resizing Funktion
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button_Refresh_Server_Tab1 ; TAB1
;~ If FileExists(@TempDir & "\tmp_server.ini") Then FileDelete(@TempDir & "\tmp_server.ini")
If GUICtrlRead($Combo_DB_Range_Tab1) = "Datenbank-Server intern" Then
_Get_Server_DB_Names("FIRMA-DB-Server")
ElseIf GUICtrlRead($Combo_DB_Range_Tab1) = "ASP Datenbank-Server" Then
_Get_Server_DB_Names("ASP-DB-Server")
ElseIf GUICtrlRead($Combo_DB_Range_Tab1) = "Eigene Auswahl" Then
_Get_Server_DB_Names("Meine-DB-Server")
Else
_Get_Server_DB_Names("FIRMA-DB-Server")
_Get_Server_DB_Names("ASP-DB-Server")
_Get_Server_DB_Names("Meine-DB-Server")
EndIf
_Fill_Server_DSN_Listbox(GUICtrlRead($Combo_DB_Filter_Tab1))
Case $Button_Refresh_DSN_Tab1
_Fill_Server_DSN_Listbox(GUICtrlRead($Combo_DB_Filter_Tab1))
Case $Button_Refresh_DB_Tab1
_Fill_Server_DSN_Listbox(GUICtrlRead($Combo_DB_Filter_Tab1))
Case $Button_SelectAll_Tab1
_GUICtrlListView_SetItemSelected($hListView_DSN_DB_Tab1, 0, True)
Case $Button_Import_Tab1
If GUICtrlRead($Radio_HKLM_Reg_Tab1) = 1 Then
_Write_ODBC_Regkey("HKEY_LOCAL_MACHINE")
Else
_Write_ODBC_Regkey("HKEY_CURRENT_USER")
EndIf
Case $Button_System_Del_Tab1
_Delete_ODBC_Regkey($ListView_System_Tab1,"HKEY_LOCAL_MACHINE")
Case $Button_User_Del_Tab1
_Delete_ODBC_Regkey($ListView_User_Tab1,"HKEY_CURRENT_USER")
Case $Button_Save_Tab1
_Save_Config_Tab1()
EndSwitch
WEnd
Else
If $CmdLine[1] = "/generate" Then
_Get_Server_DB_Names("FIRMA-DB-Server")
Exit
EndIf
EndIf
;~ Funktionen für Programmstart / Ablauf
;~-------------------------------------------------------------------------------------------------------------------------------
Func _Resize_Collum($Column) ; Spaltenbreite des Grids anpassen
Select
Case $Column = $hListView_DSN_DB_Tab1
For $i = 0 To 3
_GUICtrlListView_SetColumnWidth($Column, $i, 106)
Next
Case Else
For $i = 0 To 4
If $i = 0 Then
_GUICtrlListView_SetColumnWidth($Column, $i, 24)
Else
_GUICtrlListView_SetColumnWidth($Column, $i, 105)
EndIf
Next
EndSelect
EndFunc
Func _Disable_Tab1($Control_Status)
If $Control_Status = 1 Then
GUICtrlSetState($Button_Refresh_Server_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_Refresh_DSN_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_Refresh_DB_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_Import_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_System_Valid_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_System_Del_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_User_Valid_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_User_Del_Tab1,$GUI_ENABLE)
GUICtrlSetState($Button_SelectAll_Tab1,$GUI_ENABLE)
GUICtrlSetState($Combo_DB_Range_Tab1,$GUI_ENABLE)
GUICtrlSetState($Combo_DSN_Name_Tab1,$GUI_ENABLE)
GUICtrlSetState($Combo_DB_Filter_Tab1,$GUI_ENABLE)
Else
GUICtrlSetState($Button_Refresh_Server_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_Refresh_DSN_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_Refresh_DB_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_Import_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_System_Valid_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_System_Del_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_User_Valid_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_User_Del_Tab1,$GUI_DISABlE)
GUICtrlSetState($Button_SelectAll_Tab1,$GUI_DISABlE)
GUICtrlSetState($Combo_DB_Range_Tab1,$GUI_DISABlE)
GUICtrlSetState($Combo_DSN_Name_Tab1,$GUI_DISABlE)
GUICtrlSetState($Combo_DB_Filter_Tab1,$GUI_DISABlE)
EndIf
EndFunc
Func _Get_Server_DB_Names($DB_Server_Selection) ; Servernamen aus der Ini Datei einlesen
_Disable_Tab1(0)
$DB_Server_Array = IniReadSection($Script_Dir & "odbc-generator.ini",$DB_Server_Selection)
If @error Then
MsgBox(0,"Achtung - Konfigurationsfehler",'Bitte überprüfen Sie die "odbc-generator.ini"' & @CRLF & "Alternativ löschen Sie die Datei und starten das Programm erneut.")
Exit
EndIf
For $cnt_dbs = 1 to UBound($DB_Server_Array,1) - 1
$Ping_Reply = Ping($DB_Server_Array[$cnt_dbs][0],5) ; Check ob Server erreichbar
If Not @error And $Ping_Reply = 1 Then _Query_Server($DB_Server_Array[$cnt_dbs][0],$DB_Server_Array[$cnt_dbs][1])
Next
_Disable_Tab1(1)
EndFunc
Func _Query_Server($DB_Server,$DB_Server_Port) ; Master DB Abfrage und temporäre Ini Datei füllen
If $DB_Server_Port <> 1433 Then
If RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo", $DB_Server) <> "DBMSSOCN," & $DB_Server & "," & $DB_Server_Port Then
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo", $DB_Server, "REG_SZ", "DBMSSOCN," & $DB_Server & "," & $DB_Server_Port)
EndIf
EndIf
$sql = _SQLCon($DB_Server, $DB_User, $DB_Pass, "master")
[/autoit] [autoit][/autoit] [autoit]If $g_eventerror then
$g_eventerror = 0
Else
$version = _SQLQuery($sql, "SELECT SERVERPROPERTY('productversion') as Version")
With $version
While Not .EOF
$sql_version = .Fields("Version").value
.MoveNext
WEnd
EndWith
If StringLeft($sql_version,1) = 8 Then
$var = _SQLQuery($sql, "select name from sysdatabases where sid <> 0x01")
With $var
While Not .EOF
IniWrite(@TempDir & "\tmp_server.ini",$DB_Server,.Fields("name").value,"SQL2000" & "|" & "No Support")
.MoveNext
WEnd
EndWith
Else
$var = _SQLQuery($sql, "select name,collation_name,state_desc from sys.databases where owner_sid <> 0x01")
With $var
While Not .EOF
IniWrite(@TempDir & "\tmp_server.ini",$DB_Server,.Fields("name").value,.Fields("collation_name").value & "|" & .Fields("state_desc").value)
.MoveNext
WEnd
EndWith
EndIf
_SQLEnd($sql)
Endif
Return
EndFunc
Func _Fill_Server_DSN_Listbox($DB_Filter) ; temporäre Ini Datei für DB Grid auslesen
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($ListView_DSN_DB_Tab1))
_Disable_Tab1(0)
_ReduceMem()
$DSN_Create = GUICtrlRead($Combo_DSN_Name_Tab1)
[/autoit] [autoit][/autoit] [autoit]$cnt_dbserver=IniReadSectionNames(@TempDir & "\tmp_server.ini")
[/autoit] [autoit][/autoit] [autoit]For $i_cnt = 1 to UBound($cnt_dbserver,1) -1
$cnt_dbname=IniReadSection(@TempDir & "\tmp_server.ini",$cnt_dbserver[$i_cnt])
For $j_cnt = 1 to UBound($cnt_dbname,1) -1
[/autoit] [autoit][/autoit] [autoit]Switch $DSN_Create
Case '', "DSN = [Datenbank]"
$DSN_Name = $cnt_dbname[$j_cnt][0]
Case "DSN = [Datenbank]-[Server]"
$DSN_Name = $cnt_dbname[$j_cnt][0] & "-" & $cnt_dbserver[$i_cnt]
Case "DSN = [Server]-[Datenbank]"
$DSN_Name = $cnt_dbserver[$i_cnt] & "-" & $cnt_dbname[$j_cnt][0]
Case "DSN = ASP-[Datenbank]"
$DSN_Name = "ASP-" & $cnt_dbname[$j_cnt][0]
Case "DSN = FIRMA-[Datenbank]"
$DSN_Name = "FIRMA-" & $cnt_dbname[$j_cnt][0]
Case "DSN = intern-[Datenbank]"
$DSN_Name = "intern-" & $cnt_dbname[$j_cnt][0]
Case "DSN = lokal-[Datenbank]"
$DSN_Name = "lokal-" & $cnt_dbname[$j_cnt][0]
Case Else
If StringLeft($DSN_Create,1) = "-" Then
$DSN_Name = $cnt_dbname[$j_cnt][0] & $DSN_Create
Else
$DSN_Name = $DSN_Create & "-" & $cnt_dbname[$j_cnt][0]
EndIf
EndSwitch
Switch $DB_Filter
Case "Alle Datenbanken" , ''
If StringLeft($cnt_dbname[$j_cnt][0],4) = "CITR" or StringLeft($cnt_dbname[$j_cnt][0],4) = "NoSP" or StringLeft($cnt_dbname[$j_cnt][0],4) = "CTXR" Then
Sleep(1)
Else
_GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])
EndIf
Case "DB* (ASP Kunden)"
If StringLeft($cnt_dbname[$j_cnt][0],2) = "DB" Then _
_GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])
Case "WebT"
If StringInStr($cnt_dbname[$j_cnt][0],"WebT",2) Then _
_GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])
Case "WebS"
If StringInStr($cnt_dbname[$j_cnt][0],"WebS",2) Then _
_GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])
Case "Spam"
If StringLeft($cnt_dbname[$j_cnt][0],4) = "NoSP" Then _
_GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])
Case "Citrix"
If StringLeft($cnt_dbname[$j_cnt][0],4) = "CITR" or StringLeft($DSN_Name,4) = "CTXR" Then _
_GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])
Case Else
If StringInStr($cnt_dbname[$j_cnt][0],$DB_Filter,2) Then _
_GUICtrlListView_AddOrIns_Item($hListView_DSN_DB_Tab1, $DSN_Name & "|" & $cnt_dbserver[$i_cnt] & "|" & $cnt_dbname[$j_cnt][0] & "|" & $cnt_dbname[$j_cnt][1])
EndSwitch
Next
Next
_Mark_DSN($ListView_DSN_DB_Tab1)
_Disable_Tab1(1)
EndFunc
Func _Fill_System_DSN_Listbox($Reg_Path,$Target_Listbox) ; Registry auslesen für System/User Grids
_GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($Target_Listbox))
For $i_cnt = 1 to 100
$DSN_Name = RegEnumVal($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources", $i_cnt)
If Not @error Or $DSN_Name = "" Then
$ODBC_Driver = RegRead($Reg_Path & "\Software\ODBC\ODBC.INI\ODBC Data Sources", $DSN_Name)
If $ODBC_Driver = "SQL Server" Then ;Or $reg_odbcdriver = "Access" Then
$DB_Server=RegRead($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $DSN_Name, "Server")
$DB_Name=RegRead($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $DSN_Name, "Database")
$DB_Description = RegRead($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $DSN_Name, "Description")
If $DB_Description = "" Then $DB_Description = "keine Beschreibung"
$DB_AutoTranslate = RegRead($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $DSN_Name, "AutoTranslate")
If @error Then $DB_AutoTranslate = " *"
_GUICtrlListView_AddOrIns_Item($Target_Listbox, $DB_AutoTranslate & "|" & $DSN_Name & "|" & $DB_Server & "|" & $DB_Name & "|" & $DB_Description)
EndIf
EndIf
Next
_Mark_DSN($Target_Listbox)
EndFunc
Func _Mark_DSN($Target_Listbox) ; Non Latin Collations markieren
If $Target_Listbox = $ListView_DSN_DB_Tab1 Then
$Mark_Col = 3
Else
$Mark_Col = 4
EndIf
For $i = 0 To _GUICtrlListView_GetItemCount($Target_Listbox) -1
$Test_Col = _GUICtrlListView_GetItemText($Target_Listbox, $i, $Mark_Col)
If Not StringInStr($Test_Col,'LATIN') And $Test_Col <> '' And $Test_Col <> "SQL2000" And $Test_Col <> "keine Beschreibung" Then
_GUICtrlListView_FormattingCell($Target_Listbox, $i, $Mark_Col, 0x00FFFF, -1, -1, 300);, 'Times New Roman')
EndIf
Next
For $i = 0 To _GUICtrlListView_GetItemCount($Target_Listbox) -1
If _GUICtrlListView_GetItemText($Target_Listbox, $i, 4) = 'Offline' Then
_GUICtrlListView_FormattingCell($Target_Listbox, $i, 4, 0xff0000, -1, -1, 300);, 'Times New Roman')
EndIf
Next
_Disable_Tab1(1)
EndFunc
Func _Write_ODBC_Regkey($Reg_Path) ; Registryeinträge schreiben und Berechtigung prüfen
$DB_Selection = _GUICtrlListView_GetSelectedIndices($hListView_DSN_DB_Tab1, True)
If $DB_Selection[0] = 0 Then
MsgBox(0,"Keine Datenquellen erzeugt","Es wurde keine Auswahl getroffen.")
Return
Else
If GUICtrlRead($Check_Do_Backup_Tab1) = 1 Then _Backup_ODBC($Reg_Path,"before-import")
For $i = 1 To UBound($DB_Selection,1) -1
$Reg_Key = _GUICtrlListView_GetItemTextArray($ListView_DSN_DB_Tab1,$DB_Selection[$i])
;~ If GUICtrlRead($Check_Change_DSN_Tab1) = 1 Or Not _ArraySearch($DSN_Exists,$Reg_Key[1]) Then
RegWrite($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $Reg_Key[1], "Driver","REG_SZ", @SystemDir & "\sqlsrv32.dll") ;C:\WINDOWS\\system32
RegWrite($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $Reg_Key[1], "Server","REG_SZ", $Reg_Key[2])
RegWrite($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $Reg_Key[1], "Database", "REG_SZ",$Reg_Key[3])
RegWrite($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $Reg_Key[1], "Description", "REG_SZ",$Reg_Key[4])
RegWrite($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $Reg_Key[1], "LastUser", "REG_SZ", "DBUSER")
RegWrite($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\", $Reg_Key[1], "REG_SZ", "SQL Server")
;~ EndIf
Next
If $Reg_Path = "HKEY_LOCAL_MACHINE" Then _Fill_System_DSN_Listbox("HKEY_LOCAL_MACHINE",$ListView_System_Tab1)
If $Reg_Path = "HKEY_CURRENT_USER" Then _Fill_System_DSN_Listbox("HKEY_CURRENT_USER",$ListView_User_Tab1)
EndIf
EndFunc
Func _Delete_ODBC_Regkey($Target_Listbox,$Reg_Path) ; Registryeinträge löschen und Berechtigung prüfen
$DSN_Selection = _GUICtrlListView_GetSelectedIndices($Target_Listbox, True)
If $DSN_Selection[0] = 0 Then
MsgBox(0,"Keine Datenquellen gelöscht","Es wurde keine Auswahl getroffen.")
Return
Else
If $Reg_Path = "HKEY_CURRENT_USER" Then
If GUICtrlRead($Check_User_Del_Tab1) <> 1 Then
MsgBox(0,"Sicherheitsabfrage",'Sollen die markierten "Benutzer Datenquellen" wirklich gelöscht werden?')
Return
EndIf
Else
If GUICtrlRead($Check_System_Del_Tab1) <> 1 Then
MsgBox(0,"Sicherheitsabfrage",'Sollen die markierten "System Datenquellen" wirklich gelöscht werden?')
Return
EndIf
EndIf
EndIf
If GUICtrlRead($Check_Do_Backup_Tab1) = 1 Then _Backup_ODBC($Reg_Path,"before-delete")
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To UBound($DSN_Selection,1) -1
$Reg_Key = _GUICtrlListView_GetItemTextArray($Target_Listbox,$DSN_Selection[$i])
RegDelete($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\" & $Reg_Key[2])
RegDelete($Reg_Path & "\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\", $Reg_Key[2])
Next
If $Reg_Path = "HKEY_LOCAL_MACHINE" Then _Fill_System_DSN_Listbox("HKEY_LOCAL_MACHINE",$ListView_System_Tab1)
If $Reg_Path = "HKEY_CURRENT_USER" Then _Fill_System_DSN_Listbox("HKEY_CURRENT_USER",$ListView_User_Tab1)
EndFunc
Func _Backup_ODBC($Reg_Path,$Backup_Info) ; Backup Dir erzeugen falls erforderlich und Backup des notwendigen Regkeys erzeugen
If Not FileExists($Backup_Dir) Then DirCreate($Backup_Dir)
$Backup_File = "ODBC-" & @YEAR & "_" & @MON & "_" & @MDAY & "-" & @HOUR & "_" & @MIN & "_" & @SEC & "-" & $Backup_Info & ".reg"
If $Reg_Path = "HKEY_LOCAL_MACHINE" Then Run('regedit.exe /e "' & $Backup_Dir & "HKLM-" & $Backup_File & '" ' & '"' & $Reg_Path & "\SOFTWARE\ODBC\ODBC.INI" & '"')
If $Reg_Path = "HKEY_CURRENT_USER" Then Run('regedit.exe /e "' & $Backup_Dir & "HKCU-" & $Backup_File & '" ' & '"' & $Reg_Path & "\SOFTWARE\ODBC\ODBC.INI" & '"')
MsgBox(4096,"[" & $Reg_Path & "\SOFTWARE\ODBC\ODBC.INI]", "Der Schlüssel wurde gesichert." & @CRLF & "Sicherungspfad:" & @TAB & $Backup_Dir & @CRLF & "Sicherungsdatei:" & @TAB & "HKCU-" & $Backup_File)
EndFunc
Func _Test_ODBC() ; Erzeugen eines RegKeys unter HKLM / falls erfolgreich Admin ansonsten User
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\" & "CheckRights", "Server","REG_SZ", "Zugriff erfolgreich")
If @error Then
If Not IsDeclared("iMsgBoxAnswer") Then Local $iMsgBoxAnswer
$iMsgBoxAnswer = MsgBox(17,"Kein Schreibzugriff auf Registry Pfad HKLM\Software\ODBC\...", _
"Sie verfügen nicht über die nötigen Berechtigungen " & @CRLF & '"System Datenquellen" zu erzeugen.' & _
@CRLF & @CRLF & 'Um "System Datenquellen" zu erzeugen melden Sie sich ' & _
@CRLF & "bitte als Administrator am System an oder starten Sie das Programm" & _
@CRLF & 'mit der rechten Maustase und "Als Administrator ausführen..."' & @CRLF & _
@CRLF & 'Alternativ können Sie nur "Benutzer Datenquellen" erzeugen.' & @CRLF & _
@CRLF & "Diesen Dialog und das Programm mit [Abbrechen] beenden oder " & @CRLF & 'mit [OK] "Benutzer Datenquellen" erzeugen?')
Select
Case $iMsgBoxAnswer = 1 ;OK
$Reg_Writeable = "no"
Case $iMsgBoxAnswer = 2 ;Cancel
Exit
EndSelect
Else
RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\" & "CheckRights")
$Reg_Writeable = "yes"
EndIf
Return $Reg_Writeable
EndFunc
func _Save_Config_Tab1() ; Speichern der MSSQL Einstellungen
IniWrite($Script_Dir & "odbc-generator.ini","Konfiguration","DB-Standardfilter",GUICtrlRead($Combo_DB_Filter_Tab1))
IniWrite($Script_Dir & "odbc-generator.ini","Konfiguration","DSN-Standardfilter",GUICtrlRead($Combo_DSN_Name_Tab1))
IniWrite($Script_Dir & "odbc-generator.ini","Konfiguration","Server-Standardfilter",GUICtrlRead($Combo_DB_Range_Tab1))
IniWrite($Script_Dir & "odbc-generator.ini","Konfiguration","Backup",GUICtrlRead($Check_Do_Backup_Tab1))
IniWrite($Script_Dir & "odbc-generator.ini","Konfiguration","DSN-überschreiben",GUICtrlRead($Check_Change_DSN_Tab1))
If GUICtrlRead($Radio_HKLM_Reg_Tab1) = 1 Then
IniWrite($Script_Dir & "odbc-generator.ini","Konfiguration","Reg-Ziel","HKLM")
Else
IniWrite($Script_Dir & "odbc-generator.ini","Konfiguration","Reg-Ziel","HKCU")
EndIf
MsgBox(0,"Information:","Einstellungen wurden gespeichert.")
EndFunc
Func MyErrFunc() ; COM Fehler abfangen / Falls SQL Server für Query nicht verfügbar etc
Msgbox(0,"Verbindungsfehler: " & $DB_Server,"We intercepted a COM Error !" & @CRLF & @CRLF & _
"err.description is: " & @TAB & $oMyError.description & @CRLF & _
"err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
"err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _
"err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
"err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
"err.source is: " & @TAB & $oMyError.source & @CRLF & _
"err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
"err.helpcontext is: " & @TAB & $oMyError.helpcontext _
)
Local $err = $oMyError.number
If $err = 0 Then $err = -1
$g_eventerror = $err ; to check for after this function returns
Endfunc
Func _WM_GETMINMAXINFO($hWnd, $msg, $wParam, $lParam) ; Funktion für Resizing
Local $minmaxinfo = DllStructCreate("int;int;int;int;int;int;int;int;int;int", $lParam)
Switch $hWnd
Case $Form1_1
DllStructSetData($minmaxinfo, 7, 1032) ; min X 1038
DllStructSetData($minmaxinfo, 8, 776) ; min Y 782
EndSwitch
EndFunc
Func _ReduceMem()
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
Return SetError(@error, @extended, $ai_Return[0])
EndFunc ;==>_ReduceMem
Funktion: Wenn ihr keinen MSSQL Server zur Hand habt müsst Ihr die tmpserver.ini nach %temp% kopieren umm das Suchergebniss zu faken
Habe auch das Löschen der Datei deaktiviert.
Ablauf:
Button # links unten startet Serverabfrage nach Auswahl (Combobox darunter) muss eigentlich einmal gemacht werden aber Ihr habt ja die Datei
Button # mitte Aktualisiert die Anzeige gemäss Auswahl (Combobox darunter) es ändert sich der Name im linken Grid der wird später der DSN Bezeichner
Button # rechts Aktualisiert die Anzeige gemäss Auswahl (Combobox darunter) allerdings wird hiermit nur die Ausgabe gefiltert
Mit Go werden die DSNs in die Registry geschrieben, je nach UAC oder Berechtigung kann man zwischen HKCU /HKLM wählen.
1. Problem Wenn ich die Liste 10 mal refreshe, lassen sich die Komboboxen nicht mehr bedienen. macht man eigentlich nicht ist mir aber aufgefallen und will es korrigieren.
2. Problem was muss ich tun damit die Resize Funktion die Buttons usw. schöner mitnimmt, bei 1920x1080 sieht das schon etwas doof aus
3. Der Button "Alles Markieren" will nicht die gesamte Auswahl markieren.
Also im Prinzip erstmal nur ein paar kleine Macken mal sehen was Ihr noch so findet oder was man besser anders machen kann,
z.B. das Filtern direkt übers Array zu machen und nicht erneut die Datei einlesen.
Gruß Dietmar