Verzwirdelt

  • Hallo,
    Ich hab das Gefühl ich hab bei jedem Teilprogramm nen Fehler..
    Aber ich schau schon Ewigkeiten rein und blick gar nicht mehr durch...
    Folgendes ist meine Idee:
    [Blockierte Grafik: http://img5.fotos-hochladen.net/uploads/einstelltebvykumf3.png]

    Meine dazugehörige GUI:

    Spoiler anzeigen
    [autoit]


    #Region ### START Koda GUI section ### Form=c:\users\leonard\desktop\philip\einstellungen.kxf
    $Form2 = GUICreate("Dameige: Klausmann", 901, 601, 252, 162)
    $Label1 = GUICtrlCreateLabel("Materialien", 104, 24, 102, 30)
    GUICtrlSetFont(-1, 16, 400, 0, "Calibri")
    $Label2 = GUICtrlCreateLabel("Maschinen", 400, 24, 97, 30)
    GUICtrlSetFont(-1, 16, 400, 0, "Calibri")
    $Label3 = GUICtrlCreateLabel("Mitarbeiter", 696, 24, 101, 30)
    GUICtrlSetFont(-1, 16, 400, 0, "Calibri")
    $Input1 = GUICtrlCreateInput("", 24, 104, 121, 21)
    $Input2 = GUICtrlCreateInput("", 160, 104, 121, 21)
    $Input3 = GUICtrlCreateInput("", 320, 104, 121, 21)
    $Input4 = GUICtrlCreateInput("", 456, 104, 121, 21)
    $Input5 = GUICtrlCreateInput("", 616, 104, 121, 21)
    $Input6 = GUICtrlCreateInput("", 752, 104, 121, 21)
    $add_steam = GUICtrlCreateButton("Hinzufügen", 456, 144, 83, 25)
    $Label4 = GUICtrlCreateLabel("Art des Materials", 24, 88, 82, 17)
    $Label5 = GUICtrlCreateLabel("Preis pro Meter/kg", 160, 88, 92, 17)
    $Label6 = GUICtrlCreateLabel("Art der Maschine", 320, 88, 84, 17)
    $Label7 = GUICtrlCreateLabel("Preis pro Stunde", 456, 88, 82, 17)
    $add_worker = GUICtrlCreateButton("Hinzufügen", 754, 143, 83, 25)
    $add_res = GUICtrlCreateButton("Hinzufügen", 160, 144, 83, 25)
    $Label8 = GUICtrlCreateLabel("Name des Mitarbeiters", 616, 88, 109, 17)
    $Label9 = GUICtrlCreateLabel("Kosten pro Stunde", 752, 88, 92, 17)
    global $Einstell_List1 = GUICtrlCreateList("", 24, 192, 257, 331)
    global $Einstell_List2 = GUICtrlCreateList("", 320, 192, 257, 331)
    global $Einstell_List3 = GUICtrlCreateList("", 616, 192, 257, 331)
    $menue = GUICtrlCreateButton("Zurück zum Menü", 280, 536, 339, 25)
    $StatusBar1 = _GUICtrlStatusBar_Create($Form2)
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 25)
    $Enf_Button1 = GUICtrlCreateButton("Entfernen", 64, 144, 83, 25)
    $Enf_Button2 = GUICtrlCreateButton("Entfernen", 360, 144, 83, 25)
    $Enf_Button3 = GUICtrlCreateButton("Entfernen", 656, 144, 83, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit]

    Und mein Verzwirdeltes Problem:

    Spoiler anzeigen
    [autoit]


    ;Erstellen der Liste
    call("refresh_Einst")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    Call("close")
    GUIDelete($Einstellung)
    Exit
    Case $nMsg = $add_res
    _SQLite_Exec ($hDB, "INSERT INTO Einstell (Was,Art,Preis) " & _
    "VALUES ( 'Material','" & GUICtrlRead($Input1) & "','" & GUICtrlRead($Input2) & "');")
    call("refresh_Einst")

    Case $nMsg = $add_worker
    _SQLite_Exec ($hDB, "INSERT INTO Einstell (Was,Art,Preis) " & _
    "VALUES ( 'Mitarbeiter','" & GUICtrlRead($Input3) & "','" & GUICtrlRead($Input4) & "');")
    call("refresh_Einst")

    Case $nMsg = $add_steam
    _SQLite_Exec ($hDB, "INSERT INTO Einstell (Was,Art,Preis) " & _
    "VALUES ( 'Mitarbeiter','" & GUICtrlRead($Input5) & "','" & GUICtrlRead($Input6) & "');")
    call("refresh_Einst")


    EndSelect
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    func refresh_Einst()

    Local $hQuery, $SeNa, $selcter
    _SQLite_Query($hDB, "SELECT Was,Art,Preis FROM Einstell;", $hQuery) ; creating the query

    While _SQLite_FetchData($hQuery, $SeNa, False, False) = $SQLITE_OK ; Read Out the next Row
    ;GUICtrlSetData ( $selecter, $SeNa[0] )
    If StringCompare($SeNa[0], "Material") Then
    GUICtrlSetData ( $Einstell_List1, ($SeNa[1] & " -> " & $SeNa[2]) )

    ElseIf StringCompare($SeNa[0], "Maschinen") Then
    GUICtrlSetData ( $Einstell_List2, ($SeNa[1] & " ->" & $SeNa[2]) )

    ElseIf StringCompare($SeNa[0], "Mitarbeiter") Then
    GUICtrlSetData ( $Einstell_List3, ($SeNa[1] & " ->" & $SeNa[2]) )

    EndIf
    WEnd

    EndFunc

    [/autoit]

    Ich versteh nicht, warum nur wenn ich bei Input_1 und 2 was eingebe die Daten in List_2 landen ..
    Ich such und such aber ich blick nich wo ich mich vertan hab ..
    Vllt seht ihr es ja sofort weil ihr es nicht dauernd vor der Nase habt :D
    Danke :D :D

  • Ich seh zwar nur einen Fehler, aber der sollte nichts mit Einträgen in die ersten beiden Inputs zu tun haben:

    [autoit]


    Case $nMsg = $add_worker
    _SQLite_Exec ($hDB, "INSERT INTO Einstell (Was,Art,Preis) " & _
    "VALUES ( 'Mitarbeiter','" & GUICtrlRead($Input3) & "','" & GUICtrlRead($Input4) & "');")
    call("refresh_Einst")

    Case $nMsg = $add_steam
    _SQLite_Exec ($hDB, "INSERT INTO Einstell (Was,Art,Preis) " & _
    "VALUES ( 'Mitarbeiter','" & GUICtrlRead($Input5) & "','" & GUICtrlRead($Input6) & "');")
    call("refresh_Einst")

    [/autoit]

    Zweimal "Mitarbeiter" dürfte wohl falsch sein, einmal müsste es wohl eher "Maschinen" sein, aber das betrifft dann höchstens die Inputs 3-6.

    Was dieser ganze call(....) Müll soll musst du mir auch mal erklären. Das ist zwar nicht falsch aber sinnfrei, denn du kannst die gecallten Funktionen auch einfach direkt mit Funktionsname() aufrufen, also wozu per call()?

    Zum Schluss noch ein Hinweis:
    Wenn du willst, dass jemand den Fehler nachvollziehen kann und das Script auch testen kann solltest du eine lauffähige Version mit allen benötigten Includes und Funktionen posten. Ich habe weder Bock den fehlenden sqlite Kram nachträglich da reinzufummeln noch die notwendigen GUI Includes zusammenzusuchen. So wird es den meisten anderen hier auch gehen. Deine Chancen sind also gering, dass so jemand den Fehler findet, ich habe ihn anhand des geposteten Codes jedenfalls gerade nicht gefunden und bin der Meinung es müsste zumindestens für Input1+2 soweit funktionieren. Ohne zu testen aber wie gesagt nicht nachvollziehbar was schief geht. Möglicherweise entsteht der Fehler auch in Code Zeilen die du nicht gepostet hast.

    Einmal editiert, zuletzt von misterspeed (23. Juni 2013 um 17:39)

  • Und schön wäre es noch, wenn du die Datenbank-Datei mit bereitstellst mit ein paar Testdaten.

  • Ansonsten versuch mal so.

    Spoiler anzeigen
    [autoit]

    refresh_Einst()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    close()
    Exit
    Case $add_res
    _SQLite_Exec($hDB, "INSERT INTO Einstell VALUES ('Material','" & GUICtrlRead($Input1) & "','" & GUICtrlRead($Input2) & "');")
    refresh_Einst()
    Case $add_worker
    _SQLite_Exec($hDB, "INSERT INTO Einstell VALUES ('Maschinen','" & GUICtrlRead($Input3) & "','" & GUICtrlRead($Input4) & "');")
    refresh_Einst()
    Case $add_steam
    _SQLite_Exec($hDB, "INSERT INTO Einstell VALUES ('Mitarbeiter','" & GUICtrlRead($Input5) & "','" & GUICtrlRead($Input6) & "');")
    refresh_Einst()
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func refresh_Einst()
    Local $hQuery, $aRow
    _SQLite_Query($hDB, "SELECT * FROM Einstell;", $hQuery)
    While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
    Switch $aRow[0]
    Case "Material"
    GUICtrlSetData($Einstell_List1, ($aRow[1] & " -> " & $aRow[2]))
    Case "Maschinen"
    GUICtrlSetData($Einstell_List2, ($aRow[1] & " -> " & $aRow[2]))
    Case "Mitarbeiter"
    GUICtrlSetData($Einstell_List3, ($aRow[1] & " -> " & $aRow[2]))
    EndSwitch
    WEnd
    _SQLite_QueryFinalize($hQuery)
    EndFunc

    [/autoit]


    Wobei ja eigentlich worker Mitarbeiter heißt, was soll dann steam heißen? Eigentlich ja Dampf.

  • So, anbei ist mein Script.
    Ich probier deinen Vorschlag gleich aus m-obi.

    EDIT:
    Zum Testen:

    x Einstellung öffnen und ein paar Einträge erstellen.

    x Angebot öffnen, EInen Eintrag erstellen, Weiter drücken, Fenster schließen, Programm öffnen, versuchen erstellten Kunden zu laden

  • Mit deiner Version werden die Daten immer noch wirr eingetragen m-obi

    Zitat

    ""Wobei ja eigentlich worker Mitarbeiter heißt, was soll dann steam heißen? Eigentlich ja Dampf.""


    Mir raucht/dampft der Kopp ^^

  • OMG.....wie wäre es erstmal ein paar ordentliche Programmierstile einzuhalten?
    Die ganzen

    [autoit]

    GUICtrlSetFont(-1, 14, 400, 0, "Calibri")

    [/autoit]


    kannste alle löschen und stattdessen

    [autoit]

    GUISetFont(14, 400, 0, "Calibri")

    [/autoit]


    verwenden
    Desweiteren werden am Anfang alle GUIs erstellt und je nachdem welche man benötigt werden auf Show oder Hide gesetzt.
    Ggf. kannst du sie noch disablen und enablen, so mach ich das immer, wegen unerlaubter Usereingaben zum Beispiel oder damit der User immer weiß in welchem Fenster er agieren darf.
    Und du solltest schon Local und Global verwenden.
    Entscheide dich für eine Sprache bei der Wahl der Variablennamen, deutsch oder englisch (sinnvoller wäre natürlich englisch).
    Nicht jedes Label brauch eine Variable, nur wenn du es zur Laufzeit ändern willst.
    So da dein init bei jedem Programmstart ausgeführt wird, werden auch immer die Tabellen erstellt.
    Wenn du innerhalb einer Funktion eine globale Variable erstellst, brauchst du sie nicht mit Return zurückgeben (siehe $hDB).
    Und las überall dieses sch*** Call weg, das brauchst du nicht.
    Wenn du ein Hauptfenster hast, würde ich andere (kleine) Fenster als Child machen.
    Und wenn du schon mehrere Fenster braucht, würde ich das ganze im OnEvent-Modus machen, weil man sonst schnell durcheinander kommt mei GUIGetMsg, vorallem bei Anfängern.