Autoit - SQL Server suchen und anzeigen

07/03/2015 08:59 Memphiisto#1
Hallo ! :)

Ich bin derzeit daran ein Script mit AutoIt zu machen, welches einen SQL Server sichert und anschließend eine Email sendet mit eben der Information ob die Sicherung erfolgreich war.

Das Sichern und das Email versenden funktioniert auch schon super.
Doch mein Problem ist dass sich noch ein kleiner Schönheitsfehler im Programm habe. Wenn mir jemand dabei helfen könnte diesen zu Lösen wäre ich sehr dankbar :confused:;)


Undzwar geht es darum:

Beim ersten Start des Programmes (Solange die Settings.ini im Arbeitsverzeichnis noch nicht vorhanden ist) kommen derzeit noch einige InputBoxes welche die Daten für den Server abfragen. Wie:
  • Servername eingeben
  • SQL Datenbankname eingeben
  • SQL User eingeben
  • SQL User Pw eingeben


dies derzeit aber alles noch ein einzelnen Inputboxen.
Nun würde ich es gerne alles in einen packen. --> Auch dies ist kein Problem.

ABER nun würde ich gerne bei "SQL Servername eingeben" ein Dropdown Menü haben, in welchem alle Server aufgelistet werden derzeit im Netzwerk sind..
(Also sprich wie wenn man das SQL Managementstudio startet und dort auf das Dropdownmenü klickt um den Server auszuwählen nur eben im Kplus.)


Hat jemand eine Idee wie ich das Abfragen könnte?
Habe lange Gegooglet aber leider nicht gefunden wonach ich gesucht habe..


Vielen dank im Vorraus :handsdown:
LG MagicDave :p
07/03/2015 09:15 alpines#2
Das ist doch ganz einfach, wenn du mehrere Server eingespeichert hast kannst du doch einfach statt Inputboxen eine GUICtrlCombo anzeigen.
Stelle sie auf ReadOnly damit es besser aussieht und fertig.
07/03/2015 09:19 Memphiisto#3
Hallo und danke für die schnelle Antwort.

Ich habe ja keine "eingespeicherten" Server. Das Programm wird OHNE .ini Datei ausgeliefert.
Diese wird beim ersten Start des Programms automatisch erstellt.

Ich will im Netzwerk abfragen welche Server in der Umgebung sind, und diese dann Anzeigen lassen im Dropdownmenü.
07/03/2015 09:24 alpines#4
Das ist auch nicht schwierig, du kannst ja in einem Array die Liste der Server aufbewahren und abfragen ob sie online sind (weiß nicht genau wie das bei SQL geht aber bei generell wird das mit einem Ping gemacht).

Wenn sie online sind kannst du sie in einem 2. Array zwischenspeichern und die Combobox mit dem Inhalt des Arrays füttern. (Musst natürlich auf das Format achten.)
07/03/2015 09:35 Memphiisto#5
Es geht darum:

Ich kenne die Server NICHT, daher kann ich die Liste der Server auch nicht in einen Array speichern.
Daher will ich ja Abfragen welche Server in der Lokalen Firmennetzwerkumgebung sind ;)

Stell dir vor ich geb mein Programm irgendeinem Kunden von dem ich nicht weiß wie seine Server heißen.

Dann startet er mein Programm, es frägt ab welche Server in seinem Netzwerk sind und dann kann er zwischen seinen Servern im Dropdown Menü auswählen.

LG
07/03/2015 09:41 alpines#6
Wenn du eine spezifische IP-Range hast kannst du ja mal alle durchpingen. Aber bei SQL-Servern gibt es vielleicht eine andere Variante. Kenne mich mit SQL nicht so direkt aus aber Google spuckt mir viele vielversprechende Funde bei "SQL Server im Netzwerk finden" aus.
07/03/2015 12:09 Memphiisto#7
Okey jetzt hab ich doch noch nach erneutem suchen einen Befehl gefunden..

SQLCMD -L c --> Liefert eine Cleanliste von allen SQL Servern
Ich würd es nur gern ohne SQL CMD sondern mit einem Query machen...

Sobald ich herausgefunden habe wie ich das machen könnte geb ich bescheid
LG



Edit: 12:01 Uhr

So nun hab ich es endlich hin gekrigt..
zwar nicht so wie ich es wollte ohne SQL Cmd aber jetzt läufts immerhin.


Falls jemand den Code brauchen kann:

Code:
#include <Constants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>


;################################################;
;CmdBefehl und aufsplitten der ausgelesenen Daten;
;################################################;
$Server = _CMDRead("sqlcmd -L c")
$Servers=StringSplit($Server, @CRLF, 1)

;##############;
;Gui erstellen;
;##############;
$Form1 = GUICreate("Form1", 255, 230, 633, 406)
$Combo1 = GUICtrlCreateCombo("", 34, 88, 190, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
GUISetState(@SW_SHOW)


;#################################;
;Die Combobox mit den Daten füllen;
;#################################;
For $i = 1 to $Servers[0]-1
GUICtrlSetData($Combo1, $servers[$i]&"|")
next


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd


;########################################;
;Befehl im CMD ausführen und CMD auslesen;
;########################################;

Func _CMDRead($command)
	Local $CMDRead

	$CMD = Run(@ComSpec & " /c " & $command, @SystemDir, @SW_HIDE, $STDOUT_CHILD)

	While 1
		$CMDRead &= StdoutRead($CMD)
		If @error Then ExitLoop
	WEnd
		Return SetError(@error, @extended, $CMDRead)
EndFunc



Es dauert ein bisschen bis der GUI auf geht, da er zuerst alle Daten ausliest und dann den GUI erstellt.