Hallo an alle,
Ich bin toooootal am Rätseln und weis nicht mehr weiter. Ich habe folgendes Problem.
Das Programm dient dem zuteilen von Software zu einem PC und heist Serverrob. Es betseht aus eine linken Listenfeld einem rechtem Listenfeld und einer Combobox Wenn man nun in der Combobox einen PC auswählt bekommt man im linken Listenfeld die Dateien bzw Software angezeigt die diesem PC noch nicht zugeteilt ist.
(Zur Info ein weiters prog. Namens Clientrob was sich auf den Clients befindet war klar ... und bei jeden Neustart, morgens oder so, die Datenbank nach Änderungen abfragt die man mit Serverrob eingestellt hat.)
Das funktioniert soweit.
Jetzt zum ersten Problem was ich nicht raffe ...
Wenn ich nun einen Wert im linken Listenfeld markiere und es über drücken des $Button1 (Zeiger nach rechts) in das rechte Listenfeld übertragen möchte funktioniert das. Was aber nicht funktioniert ist wenn ich nun mehrere Werte auswähle/markiere und sie nun durch drücken des $Button1 in das rechte Listenfeld übertragen möchte. Das dann dazu führt das Windows die Ausführung des scriptes unterbricht.
Es gibt also eine SQLite DB Names daten.db in der ich in drei Tabellen informationen abgelegt habe. Und dann noch mein Script:
UPDATE 21:00 Uhr --- Ich habe die Datenbank mal von .db in .txt umbenannt um Sie hier zur Einsicht hochzuladen
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListBoxConstants.au3>
#include <WindowsConstants.au3>
#include <array.au3>
#include <GUIListBox.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>
$clientINI="Serverrob.ini"
$server=IniRead(@ScriptDir & "\" & $clientINI, "Server", "name_or_ip", "")
$DirSQLite_DB=IniRead(@ScriptDir & "\" & $clientINI, "Server", "path", "")
$Datenbankname='daten.db'
;$Computername="PC001"
$IpLeftTrim=StringTrimLeft($server,2)
$IpRightTrim=StringTrimRight($IpLeftTrim,1)
;######################################################################################################################################################################
[/autoit] [autoit][/autoit] [autoit]if FileExists(@ScriptDir & "\" & $clientINI)==0 Then
[/autoit] [autoit][/autoit] [autoit]IniWrite(@ScriptDir & "\" & $clientINI, "Server", "name_or_ip", "\\127.0.0.1\")
IniWrite(@ScriptDir & "\" & $clientINI, "Server", "path", "kein_eintrag__bitte_pfad_eintragen\")
IniWrite(@ScriptDir & "\" & $clientINI, "Server", "name", "serverrob.ini")
if @error Then
MsgBox(16, "Serverrob - Fehlermeldung", "Die Ini - Datei konnte im Ordner " & @ScriptDir & " nicht geschrieben werden." & @CRLF & "Bitte prüfen Sie die schreibrechte dieses Ordners und versuchen Sie danach Serverrob nochmal zu starten.")
Exit
EndIf
; Wert auslesen für die IF Schleife
$PruefePfadinINI=IniRead(@ScriptDir & "\" & $clientINI, "Server", "path", "")
; Pingversuch für die IF Schleife
$PingStatus=ping($IpRightTrim,250)
if $PruefePfadinINI=="kein_eintrag__bitte_pfad_eintragen\" or @error==3 Then
MsgBox(48, "Serverrob - Achtung", "In der Ini - Datei [Serverrob.ini] ist noch kein Pfad zum Softwaredepot eingetragen." & @CRLF & "Drücken Sie OK. Danach wird sich die Ini - Datei öffnen. Tragen Sie dort dann bei 'path=\kein_eintrag__bitte_pfad_eintragen\'" & @CRLF & "den Pfad zum Softwaredepot ein. Das könnte dan z.B. so aussehen: 'path=\\server\softwareordner\'." & @CRLF & " Tragen Sie dann noch den Servernamen oder die Server IP bei 'name_or_ip=""' ein. Speichern und schliessen Sie die Ini - Datei und starten Sie Serverrob erneut.")
ShellExecute(@ScriptDir & "\" & $clientINI)
EndIf
Exit
EndIf
;######################################################################################################################################################################
;prüfung ob die client.ini die richtigen informationen enthält
; Wert auslesen für die IF Schleife
$PruefePfadinINI=IniRead(@ScriptDir & "\" & $clientINI, "Server", "path", "")
; Pingversuch für die IF Schleife
$PingStatus=ping($IpRightTrim,250)
; Prüft ob ein Eintrag in der Sektion [server] wert path vorgenommen wurde und ob ein Ping auf den Server machbar ist
if $PruefePfadinINI=="kein_eintrag__bitte_pfad_eintragen\" or @error==3 Then
MsgBox(48, "Serverrob - Achtung", "In der Ini - Datei [Serverrob.ini] ist noch kein Pfad zum Serververzeichins eingetragen." & @CRLF & "Drücken Sie OK. Danach wird sich die Ini - Datei öffnen. Tragen Sie dort dann bei 'path=\kein_eintrag__bitte_pfad_eintragen\'" & @CRLF & "den Pfad zum Softwaredepot ein. Das könnte dan z.B. so aussehen: 'path=\\server\softwareordner\'." & @CRLF & " Tragen Sie dann noch den Servernamen oder die Server IP bei 'name_or_ip=""' ein. Speichern und schliessen Sie die Ini - Datei und starten Sie Serverrob erneut.")
ShellExecute(@ScriptDir & "\" & $clientINI)
Exit
EndIf
; Prüft die erreichbarkeit der Serverseitigen ini - Datei
if FileExists($server & $DirSQLite_DB & "serverrob.ini")==0 Then
MsgBox(16, "Serverrob - Fehlermeldung", "Die Serverseitige Ini - Datei ist nicht im Zielpfad zu finden." & @CRLF & "Bitte kontaktieren Sie Ihren Administrator wegen diesem Problem.")
Exit
EndIf
; Prüft ob in ScriptDir die AutoIt3.exe liegt wenn nicht wird sie vom Server kopiert.
; Diese Datei ist zwingend notwenig für die Ausführung der Unterscripte vom Server
;$test=$ServerIP_IniDatei & $ServerPath_IniDatei & "AutoIt3.exe"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$FileExistTest=FileExists(@ScriptDir & "\AutoIt3.exe")
[/autoit] [autoit][/autoit] [autoit]If not $FileExistTest Then
FileCopy($server & $DirSQLite_DB & "AutoIt3.exe", @ScriptDir & "\AutoIt3.exe", 1)
if @error Then
Msgbox(0,"Filecopy","Es ist ein Fehler mit der Nummer " & @error & " aufgetreten.")
Exit
EndIf
EndIf
[/autoit] [autoit][/autoit] [autoit];######################################################################################################################################################################
; Verbindungstest zum Server
$PingStatus=ping($IpRightTrim,250)
[/autoit] [autoit][/autoit] [autoit]If $PingStatus Then; also possible: If @error = 0 Then ...
[/autoit] [autoit][/autoit] [autoit]Else
Msgbox(16,"Robclient - Ping Error","Der Server konnte nicht erreicht werden. Errorcode to Ping: " & @error & @CRLF & _
"Der Verbindungsversuch wird abgebrochen.")
Exit
EndIf
$DirveStatus = DriveStatus($server & $DirSQLite_DB)
[/autoit] [autoit][/autoit] [autoit]if @error then
MsgBox(16, "Robclient - DriveStatus Error", "Der angegeben Pfad zur Datenbank ist nicht korrekt." & @CRLF & _
"Der angebenen Pfad lautet derzeit: " & $DirSQLite_DB & @CRLF & _
"Überprüfen Sie den in der client.ini abgegebenen Pfad.")
Exit
EndIf
;######################################################################################################################################################################
Local $Query_TABLE_CLIENT, $aRow_CLIENT, $sMsg_CLIENT
Local $Query_TABLE_SOFTWAREDEPOT, $aRow_SOFTWAREDEPOT, $sMsg_SOFTWAREDEPOT,$Query_combo,$Query_rechte_listbox,$sID,$cID
; Startet die SQLite.dll
_SQLite_Startup ()
; Öffnet die Datenbank
_SQLite_Open ($server & $DirSQLite_DB & $Datenbankname)
; Bereitet eine SQLite-Abfrage anhand des @Computername der Tabelle USER vor
_SQlite_Query (-1, "select pcname from client order by id;", $Query_TABLE_CLIENT)
#Region ### START Koda GUI section ### Form=D:\Autoit\Client_PC_update\GUI\datenbankeingabe_softwarezuteilung.kxf
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("Serverrob - Dateidisponent", 353, 416, 303, 219)
GUISetIcon("D:\007.ico")
;############################ C O M B O B O X #####################################
$Combo1 = GUICtrlCreateCombo("Auswahl", 200, 8, 137, 25)
While _SQLite_FetchData ($Query_TABLE_CLIENT,$aRow_CLIENT) = $SQLITE_OK
$sMsg_CLIENT &= $aRow_CLIENT[0]
GUICtrlSetData(-1,'' & $sMsg_CLIENT & "|")
$sMsg1_CLIENT = $sMsg_CLIENT
$sMsg_CLIENT=""
WEnd
;##################################################################################
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;############################ linke L I S T B O X #################################
$linke_listbox = GUICtrlCreateList("", 8, 8, 137, 344, BitOR($LBS_EXTENDEDSEL,$WS_VSCROLL))
;##################################################################################
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];############################ linke L I S T B O X #################################
$rechte_listbox = GUICtrlCreateList("", 200, 48, 137, 292,$WS_VSCROLL)
;##################################################################################
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];############################ Zeiger nach rechts ##################################
$Button1 = GUICtrlCreateButton(">", 156, 48, 31, 25, 0)
;##################################################################################
;~ $Button2 = GUICtrlCreateButton(">>", 156, 48, 31, 25, 0)
;~ GUICtrlSetState(-1, $GUI_DISABLE)
;~ $Button3 = GUICtrlCreateButton("<", 157, 81, 31, 25, 0)
;~ GUICtrlSetState(-1, $GUI_DISABLE)
;~ $Button4 = GUICtrlCreateButton("<<", 157, 114, 32, 25, 0)
;~ GUICtrlSetState(-1, $GUI_DISABLE)
$ok = GUICtrlCreateButton("&OK", 104, 369, 75, 25, 0)
$abbrechen = GUICtrlCreateButton("&Cancel", 184, 369, 75, 25, 0)
$help = GUICtrlCreateButton("&Help", 264, 369, 75, 25, 0)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Select
Case $nMsg = $GUI_EVENT_CLOSE
Exit
Case $nMsg = $abbrechen
Exit
Case $nMsg = $ok
For $i=0 to _GUICtrlListBox_GetCount($rechte_listbox)-1
_SQLite_Query(-1,"select id from softwaredepot where softname='"& _GUICtrlListBox_GetText($rechte_listbox,$i) &"';)",$Query_rechte_listbox)
_SQLite_FetchData($Query_rechte_listbox, $sID)
_SQLite_Query(-1,"select id from client where pcname='"& GUICtrlRead($Combo1) &"';)",$Query_combo)
_SQLite_FetchData($Query_combo, $cID)
_SQLite_Exec(-1,"INSERT INTO SOFTWAREINSTALL (Client,Softid) VALUES ("&$sID[0]&","&$cID[0]&");")
Next
ExitLoop
Case $nMsg=$Button1
$aSel=_GUICtrlListBox_GetSelItems($linke_listbox)
for $i=1 To $aSel[0]
_GUICtrlListBox_InsertString($rechte_listbox,_GUICtrlListBox_GetText($linke_listbox,$aSel[$i]))
_GUICtrlListBox_DeleteString($linke_listbox,$aSel[$i])
Next
;~ Case $nMsg=$Button3
;~
;~ $aSel=_GUICtrlListBox_GetSelItems($rechte_listbox)
;~ MsgBox("","",GUICtrlRead($rechte_listbox))
;~ for $i=1 To $aSel[0]
;~ _GUICtrlListBox_InsertString($linke_listbox,_GUICtrlListBox_GetText($rechte_listbox,$aSel[$i]))
;~ _GUICtrlListBox_DeleteString($rechte_listbox,$aSel[$i])
;~ Next
;~
Case $nMsg=$Combo1
;MsgBox("","1",GUICtrlRead($Combo1))
GUICtrlSetData($rechte_listbox,"")
_SQlite_Query (-1, "select sd.softname from client c, softwaredepot sd left join softwareinstall s " & _
"on c.ID = s.CLIENT and s.softid=sd.id where s.id is null and c.PCNAME = '" & GUICtrlRead($Combo1) & "';", $Query_TABLE_SOFTWAREDEPOT)
;MsgBox("","2", "select sd.softname from client c, softwaredepot sd left join softwareinstall s on c.ID = s.CLIENT and s.softid=sd.id where s.id is null and c.PCNAME = '" & GUICtrlRead($Combo1) & "';")
$sMsg_SOFTWAREDEPOT=""
While _SQLite_FetchData ($Query_TABLE_SOFTWAREDEPOT,$aRow_SOFTWAREDEPOT) = $SQLITE_OK
$sMsg_SOFTWAREDEPOT &= "|"&$aRow_SOFTWAREDEPOT[0]
WEnd
;MsgBox("","",$sMsg_SOFTWAREDEPOT)
GUICtrlSetData($linke_listbox,$sMsg_SOFTWAREDEPOT)
EndSelect
WEnd
GUIDelete()
[/autoit] [autoit][/autoit] [autoit]_SQLite_Close($server & $DirSQLite_DB & $Datenbankname)
_SQLite_Shutdown()
MsgBox(64, "Information", "Durchgelaufen",2)
[/autoit] [autoit][/autoit] [autoit]Exit
[/autoit] [autoit][/autoit] [autoit][/autoit]Kann mir jemand von der Brücke helfen... dieser Eselsbrücke ???