Hallo Leute, hab mal wieder ein kleines eigenartiges Problem:
Ich kann das Programm mal toll ausführen, kann zb im Menü auf Hinzufügen klicken, das neue GUI öffnet sich, gebe alles ein, füge es hinzu und "bam" - das wars... nachher werden keine eingaben mehr entgegengenommen. Close-Button geht auch nicht mehr (aber das X).
Das Programm soll als Lagerprogramm dienen und greift auf eine MySQL-Datenbank zu.
Ablauf:
Zeile 105 ;Hinzufügefenster wird aufgerufen
Zeile 208 ;In der while-Schleife wird andauernd ein Buttondruck abgefragt
Zeile 229 ; wird noch richtig ausgeführt!
Zeile 90-132 ;Hier reagiert nichts mehr!?!???!?
Ich hoffe, ihr habt noch einen Überblick und könnt mir helfen!
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <GuiListView.au3>
#include <GuiMenu.au3>
#include <mysql.au3>
#include <Array.au3>
Global $sConnected=0
Global $sql
_Main()
Func _Main()
Local $filemenu, $fileitem, $separator1
Local $exititem, $helpmenu, $aboutitem, $okbutton, $cancelbutton
Local $msg, $file
#forceref $separator1
$iGUIWidth = 1000
$iGUIHeight = 600
$hWnd = GUICreate("Lagerliste", $iGUIWidth, $iGUIHeight)
#region Datei
$filemenu = GUICtrlCreateMenu("Datei")
$connectitem = GUICtrlCreateMenuItem("Verbinden", $filemenu)
$separator1 = GUICtrlCreateMenuItem("", $filemenu)
$fileitem = GUICtrlCreateMenuItem("Öffnen...", $filemenu)
$separator2 = GUICtrlCreateMenuItem("", $filemenu)
$exititem = GUICtrlCreateMenuItem("Schließen", $filemenu)
#endregion Datei
#region Bearbeiten
$editmenu = GUICtrlCreateMenu("Bearbeiten")
$additem = GUICtrlCreateMenuItem("Hinzufügen", $editmenu)
$delitem = GUICtrlCreateMenuItem("Löschen", $editmenu)
#endregion Bearbeiten
#region Hilfe
$helpmenu = GUICtrlCreateMenu("?")
$aboutitem = GUICtrlCreateMenuItem("Über", $helpmenu)
#endregion Hilfe
$refreshbutton = GUICtrlCreateButton("Aktualisieren", 10, 550, 70, 20)
$cancelbutton = GUICtrlCreateButton("Cancel", 920, 550, 70, 20)
GUISetState()
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$hBitmap2 = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer2 = _GDIPlus_ImageGetGraphicsContext($hBitmap2)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer2, 2)
Global $table = GUICtrlCreateListView("Artikel# |Beschreibung |Lagerstand |Preis",10,10,400,500)
_GDIPlus_GraphicsDrawLine($hBuffer,410,300,1000,300)
$outArtikel = GUICtrlCreateInput("1",430,320,30,20)
$outbutton = GUICtrlCreateButton("- Abbuchen", 470, 320, 80, 20)
$inArtikel =GUICtrlCreateInput("1",430,350,30,20)
$inbutton = GUICtrlCreateButton("+ Aufbuchen", 470, 350, 80, 20)
_refreshListView($table)
While 1;Sleep(20)
$msg = GUIGetMsg()
; Sleep(2000)
; MsgBox(0,"Debug",GUICtrlRead($table))
;Produktinformationen schreiben:
Global $artikel = StringSplit(GUICtrlRead(GUICtrlRead($table)),"|")
If GUICtrlRead($table) > 20 Then
_GDIPlus_GraphicsClear($hBuffer2, 0xFFEEEEEE)
$image=_GDIPlus_ImageLoadFromFile(@WorkingDir&"\Produktbilder\" & $artikel[1] &".jpg") ;Produktbild laden
_GDIPlus_GraphicsDrawImageRect($hBuffer2,$image,0,0,350,600) ;Produktbild zeichnen
_GDIPlus_GraphicsDrawString($hBuffer2,"Artikelnummer: " & $artikel[1],370,10,"Arial",22) ;Artikelnummer
_GDIPlus_GraphicsDrawString($hBuffer2,"Beschreibung:" & @CRLF & " " &$artikel[2],370,50,"Arial",22) ;Beschreibung
_GDIPlus_GraphicsDrawString($hBuffer2,"Lagerstand: " & $artikel[3] & " Stück",370,120,"Arial",22) ;Lagerstand
_GDIPlus_GraphicsDrawString($hBuffer2,"Preis: " & $artikel[4] & " €",370,160,"Arial",22) ;Preis
EndIf
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton
;_disconnectSQL() ;nicht mehr benötigt, da nach jedem SQL-Befehl die Verbindung abgebaut wird
;If _disconnectSQL() == 0 Then
; MsgBox(0,"Status","Verbindung konnte nicht getrennt werden")
;EndIf
ExitLoop
Case $msg = $connectitem
_connectSQL()
If _connectSQL() == 0 Then
if @error = 1 Then
MsgBox(0,"Status","Error opening connection")
ElseIf @error = 2 Then
MsgBox(0,"Status","MySQL ODBC Driver not installed.")
EndIf
Else
MsgBox(0,"Status","Verbindung wurde erfolgreich hergestellt!")
EndIf
Case $msg = $fileitem
$file = FileOpenDialog("Datei auswählen...", @TempDir, "All (*.*)")
Case $msg = $additem
_addToDatabase()
Case $msg = $delitem
_delFromDatabase()
Case $msg = $inbutton ;Artikel plus Eins
_bucheArtikel(+1,$inArtikel)
Case $msg = $outbutton ;Artikel minus Eins
_connectSQL()
$outArtikel = Number(GUICtrlRead($outArtikel))
$query = "UPDATE produkte SET Lagerstand='"&$artikel[3]-$outArtikel&"' WHERE Artikelnummer='"&$artikel[1]&"';"
If GUICtrlRead($table) > 20 Then
_Query($sql, $query)
MsgBox(0,"Debug","Wurde abgebucht")
EndIf
_refreshListView($table)
Case $msg = $exititem
ExitLoop
Case $msg = $refreshbutton
_refreshListView($table)
Case $msg = $aboutitem
MsgBox(0, "Über", "written by Palmers Julian 2012")
EndSelect
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap2, 415,10,575,280)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
WEnd
GUIDelete()
Exit
EndFunc ;==>_Main
Func _connectSQL()
$sUsername = "bn"
$sPassword = "******"
$sDatabase = "lagerliste"
$sServer = "localhost"
$sql = _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer)
If $sql <> 0 Then $sConnected = 1
Return($sql)
EndFunc
Func _disconnectSQL()
local $dis = _MySQLEnd($sql)
If $dis <> 0 Then $sConnected = 0
Return($dis)
EndFunc
Func _bucheArtikel($bucheRichtung,$bucheFeld)
_connectSQL()
$bucheFeld = Number(GUICtrlRead($bucheFeld))
If GUICtrlRead($table) > 20 AND ($artikel[1]<>0 Or $artikel[2]<>0 Or $artikel[3]<>0 Or $artikel[4]<>0) Then
$query = "UPDATE produkte SET Lagerstand='"&$artikel[3]+($bucheFeld*$bucheRichtung)&"' WHERE Artikelnummer='"&$artikel[1]&"';"
_Query($sql, $query)
_refreshListView($table)
MsgBox(0,"Debug","Wurde gebucht")
EndIf
_disconnectSQL()
EndFunc
Func _refreshListView($listView)
_GUICtrlListView_DeleteAllItems($listView)
_connectSQL()
$rCount = _CountRecords($sql, "produkte", "Artikelnummer", "")
Global $rList[$rCount][4]
$rArtikelnummer = _GetColVals($sql, "produkte", "Artikelnummer")
$rBeschreibung = _GetColVals($sql, "produkte", "Beschreibung")
$rLagerstand = _GetColVals($sql, "produkte", "Lagerstand")
$rPreis = _GetColVals($sql, "produkte", "Preis")
For $i=1 To $rCount Step +1
$rList[$i-1][0] = $rArtikelnummer[$i]
$rList[$i-1][1] = $rBeschreibung[$i]
$rList[$i-1][2] = $rLagerstand[$i]
$rList[$i-1][3] = $rPreis[$i]
GUICtrlCreateListViewItem($rList[$i-1][0]&"|"&$rList[$i-1][1]&"|"&$rList[$i-1][2]&"|"&$rList[$i-1][3],$listView)
Next
_ArrayDisplay($rList) ;Debug
_disconnectSQL()
EndFunc
Func _addToDatabase()
$hAddWnd = GUICreate("Hinzufügen", 400, 170)
GUISetState()
GUICtrlCreateLabel("Artikelnummer:",10,10)
$AddArtikelnummer = GUICtrlCreateInput("",100,8,100,20)
GUICtrlCreateLabel("Beschreibung:",10,40)
$AddBeschreibung = GUICtrlCreateInput("",100,38,290,20)
GUICtrlCreateLabel("Lagermenge:",10,70)
$AddMenge = GUICtrlCreateInput("",100,68,80,20)
GUICtrlCreateLabel("Preis[€]:",10,100)
$AddPreis = GUICtrlCreateInput("",100,98,80,20)
$AddPlus = GUICtrlCreateButton("Hinzufügen", 10, 140, 80, 20)
$AddClose = GUICtrlCreateButton("Abbrechen", 310, 140, 80, 20)
While 1
$msg1 = GUIGetMsg()
Select
Case $msg1 = $GUI_EVENT_CLOSE OR $msg1 = $AddClose
GUIDelete()
_refreshListView($table)
ExitLoop
Case $msg1 = $AddPlus
$AddArtikelnummer = GUICtrlRead($AddArtikelnummer)
$AddBeschreibung = GUICtrlRead($AddBeschreibung)
$AddMenge = Number(GUICtrlRead($AddMenge))
$AddPreis = Number(GUICtrlRead($AddPreis))
;Zu Datenbank hinzufügen
If $AddArtikelnummer <> "" And $AddBeschreibung <> "" Then
_connectSQL()
_Query($sql, "USE lagerliste;")
$query = "INSERT INTO produkte (Artikelnummer, Beschreibung, Lagerstand, Preis) VALUES ('"&$AddArtikelnummer&"','"&$AddBeschreibung&"',"&$AddMenge&","&$AddPreis&");"
_Query($sql, $query)
MsgBox(0,"Status","Artikel wurde angelegt!")
GUIDelete()
_disconnectSQL()
_refreshListView($table)
Else
MsgBox(0,"Fehler","Artikelnummer, Beschreibung oder Preis fehlt!")
GUIDelete()
_addToDatabase()
EndIf
EndSelect
WEnd
EndFunc
Func _delFromDatabase()
$hDelWnd = GUICreate("Löschen", 400, 170)
GUISetState()
GUICtrlCreateLabel("Artikelnummer:",10,10)
$AddArtikelnummer = GUICtrlCreateInput("",100,8,100,20)
$DelMinus = GUICtrlCreateButton("Löschen", 10, 140, 80, 20)
$DelClose = GUICtrlCreateButton("Abbrechen", 310, 140, 80, 20)
While 1
$msg2 = GUIGetMsg()
Select
Case $msg2 = $GUI_EVENT_CLOSE OR $msg2 = $DelClose
GUIDelete()
_refreshListView($table)
ExitLoop
Case $msg2 = $DelMinus
$AddArtikelnummer = GUICtrlRead($AddArtikelnummer)
;Von Datenbank löschen
If $AddArtikelnummer <> "" Then
_connectSQL()
_Query($sql, "USE lagerliste;")
$query = "DELETE FROM produkte WHERE Artikelnummer='"&$AddArtikelnummer&"';"
_Query($sql, $query)
MsgBox(0,"Status","Artikel wurde gelöscht!")
Else
MsgBox(0,"Fehler","Zu löschende Artikelnummer eingeben!")
EndIf
EndSelect
WEnd
EndFunc