List - markierte Objekte lesen

  • Hallo an diesem schönen verregneten Sonntag,

    Wieder möchte ich mich mit meinem Problem an euch wenden.
    Für ein Kalkulationsprogramm wird in meinem Programm eine Liste mit Kundendaten erstellt.
    Dies funktioniert auch einwandfrei.
    Nun schaffe ich es aber nicht, markierte Werte aus der Liste zu lesen.

    Anbei mein Code:

    init:

    Spoiler anzeigen
    [autoit]


    func init()
    _SQLite_StartUp("sqlite3.dll")
    If @error Then
    MsgBox(16, "SQLite Error", "Can't find 'sqlite3.dll' ")
    Exit -1
    EndIf
    Global $hDB = _SQLite_Open("PK-GLB.pk")
    If @error Then
    MsgBox(16, "SQLite Error", "Can't open or create a permanent Database!, cause: "& @error)
    Exit -1
    EndIf

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

    _SQLite_Exec ($hDB, "CREATE TABLE Kundendaten (Thema,Name,Telefon,Email,Adresse,Postleitzahl,Ort,RegNr,Rechnungsart);")
    _SQLite_Exec ($hDB, "CREATE TABLE Angebote (RegNr,AngNr);")
    _SQLite_Exec ($hDB, "CREATE TABLE Ausfuehrung (RegNr,AngNr,Ausfuehr,Preis,CalcNr);")
    _SQLite_Exec ($hDB, "CREATE TABLE Nachcalk (CalcNr,Was,Art,Anzahl,gesPreis);")
    _SQLite_Exec ($hDB, "CREATE TABLE Einstell (Was,Art,Preis);")

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

    If( RegRead("KLAUSMANN_REG","REGNR") < 0) or (RegRead("KLAUSMANN_REG","REGNR")=@error) Then
    RegWrite("HKEY_CURRENT_USER\Software\KLAUSMANN_REG", "REG_NR", "REG_SZ",0)
    If @error Then
    MsgBox(64, "Registry", "Can't write in registry. "& @error)
    Exit -1
    EndIf
    EndIf

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

    Global $RegNr = RegRead("HKEY_CURRENT_USER\Software\KLAUSMANN_REG", "REG_NR")
    Return $hDB

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

    EndFunc

    [/autoit]

    dazugehörige GUI:

    Spoiler anzeigen
    [autoit]


    #Region ### START Koda GUI section ### Form=c:\users\leonard\desktop\philip\angebot.kxf
    $Angebot = GUICreate("Dameige: Klausmann", 901, 494, 317, 141)
    $Pic1 = GUICtrlCreatePic("C:\Users\leonard\Desktop\ZuSortierendeFotos\Logos\Logos\Logo_RGB.jpg", 656, 0, 241, 283)
    $Label1 = GUICtrlCreateLabel("Name des Kunden:", 16, 16, 125, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label2 = GUICtrlCreateLabel("Postleitzahl:", 16, 56, 83, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "calibri")
    $Label3 = GUICtrlCreateLabel("Wohnort:", 368, 56, 64, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label4 = GUICtrlCreateLabel("Thema:", 368, 16, 52, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label5 = GUICtrlCreateLabel("Geschätzter Zeitraum:", 16, 176, 147, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Name = GUICtrlCreateInput("Nachname Vorname", 168, 16, 185, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    GUICtrlSetTip(-1, "Nachname Vorname")
    $Postleitzahl = GUICtrlCreateInput("", 168, 56, 185, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Thema = GUICtrlCreateInput("", 464, 16, 121, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Wohnort = GUICtrlCreateInput("", 464, 56, 121, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $StatusBar1 = _GUICtrlStatusBar_Create($Angebot)
    _GUICtrlStatusBar_SetMinHeight($StatusBar1, 25)
    $WeiterButton = GUICtrlCreateButton("Weiter", 704, 351, 121, 33)
    $MonthCal1 = GUICtrlCreateMonthCal("2013/06/19", 16, 224, 287, 164)
    $Rechnung = GUICtrlCreateRadio("via Rechnung", 512, 256, 113, 17)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Pauschale = GUICtrlCreateRadio("via Pauschale", 360, 256, 113, 17)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label6 = GUICtrlCreateLabel("-", 368, 173, 11, 33)
    GUICtrlSetFont(-1, 18, 400, 0, "Calibri")
    $Label7 = GUICtrlCreateLabel("Straße:", 16, 96, 49, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Strasze = GUICtrlCreateInput("", 168, 96, 185, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label8 = GUICtrlCreateLabel("Hausnummer:", 368, 96, 94, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Hausnummer = GUICtrlCreateInput("", 464, 96, 121, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Date1 = GUICtrlCreateDate("2013/06/20 09:38:19", 176, 176, 185, 25)
    $Date2 = GUICtrlCreateDate("2013/06/20 09:38:19", 385, 176, 185, 25)
    $Nummer = GUICtrlCreateInput("", 168, 136, 185, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label9 = GUICtrlCreateLabel("Telefonnummer:", 16, 136, 110, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label10 = GUICtrlCreateLabel("Email:", 368, 136, 44, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Email = GUICtrlCreateInput("", 464, 136, 177, 27)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Label11 = GUICtrlCreateLabel("Oder wählen Sie einen bestehenden Kunden:", 336, 304, 294, 23)
    GUICtrlSetFont(-1, 12, 400, 0, "Calibri")
    $Bestkund = GUICtrlCreateList("", 336, 336, 241, 51)
    GUICtrlSetFont(-1, 10, 400, 0, "Calibri")
    $beKu = GUICtrlCreateCheckbox("", 312, 304, 17, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit]

    und entsprechender Code zum Anlegen der Datenbank und entsprechend gedachtes Auslesen von einem markierten Objekt:

    Spoiler anzeigen
    [autoit]


    ;füllen der Liste der besthenden kunden
    Local $hQuery, $SeNa,
    _SQLite_Query($hDB, "SELECT Name,RegNr FROM Kundendaten;", $hQuery) ; creating the query

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

    While _SQLite_FetchData($hQuery, $SeNa, False, False) = $SQLITE_OK ; Read Out the next Row
    GUICtrlSetData ( $Bestkund, $SeNa[0] )
    WEnd

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

    ;Auswahl durch Angebot_1 & Speichern von Kundendaten

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

    While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    GUIDelete($Angebot)
    Call("close")
    Case $nMsg = $WeiterButton

    If BitAND(GUICtrlRead($beKu), $GUI_CHECKED) = $GUI_CHECKED Then
    Local $Vgl = GUICtrlRead($Bestkund,$GUI_FOCUS)
    ;Vergleich Namen aus Liste mit ausgewählten Namen(bestehender Kunde)-> gebe RegNr zurück.
    MsgBox(64,"",$Vgl)
    While _SQLite_FetchData($hQuery, $SeNa, False, False) = $SQLITE_OK ; Read Out the next Row
    If (StringCompare ( $SeNa[0], $Vgl,2) = 0) Then
    local $saveReg = $SeNa[1]
    EndIf
    WEnd

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

    Call("Angebot2",$saveReg)
    ExitLoop
    EndIf

    Local $Vgl_2 = GUICtrlRead($Name)
    ; Vergleich Namen aus Liste mit eingegebenen Namen(neukunde), wenn ja-> error, weil schon vorhanden.
    While _SQLite_FetchData($hQuery, $SeNa, False, False) = $SQLITE_OK ; Read Out the next Row
    If (StringCompare ( $SeNa[0], $Vgl_2,2) = 0) Then
    MsgBox(64,"Dameige","Kunde schon vorhanden")
    GUIDelete($Angebot)
    Call("close")
    EndIf
    WEnd

    If BitAND(GUICtrlRead($Pauschale), $GUI_CHECKED) = $GUI_CHECKED Then
    _SQLite_Exec ($hDB, "INSERT INTO Kundendaten (Thema,Name,Telefon,Email,Adresse,Postleitzahl,Ort,RegNr,Rechnungsart) " & _
    "VALUES ( '" & GUICtrlRead($Thema) & "','" & GUICtrlRead($Name) & "','" & GUICtrlRead($Nummer) & "','" & GUICtrlRead($Email) & "','" & GUICtrlRead($Strasze) & "','" & GUICtrlRead($Postleitzahl) & "','" & GUICtrlRead($Wohnort) & "','" & $RegNr & "','P');")
    $RegNr = $RegNr+1

    RegDelete("HKEY_CURRENT_USER\Software\KLAUSMANN_REG", "REG_NR")
    RegWrite("HKEY_CURRENT_USER\Software\KLAUSMANN_REG", "REG_NR", "REG_SZ",$RegNr)
    GUIDelete($Angebot)
    call("Angebot_2",($RegNr-1))

    ExitLoop
    ElseIf BitAND(GUICtrlRead($Rechnung), $GUI_CHECKED) = $GUI_CHECKED Then
    _SQLite_Exec ($hDB, "INSERT INTO Kundendaten (Thema,Name,Telefon,Email,Adresse,Postleitzahl,Ort,RegNr,Rechnungsart) " & _
    "VALUES ( '" & GUICtrlRead($Thema) & "','" & GUICtrlRead($Name) & "','" & GUICtrlRead($Nummer) & "','" & GUICtrlRead($Email) & "','" & GUICtrlRead($Strasze) & "','" & GUICtrlRead($Postleitzahl) & "','" & GUICtrlRead($Wohnort) & "','" & $RegNr & "','R');")
    $RegNr = $RegNr+1

    RegDelete("HKEY_CURRENT_USER\Software\KLAUSMANN_REG", "REG_NR")
    RegWrite("HKEY_CURRENT_USER\Software\KLAUSMANN_REG", "REG_NR", "REG_SZ",$RegNr)
    If @error Then
    MsgBox(64, "Registry", "Can't write in registry. "& @error)
    Exit -1
    EndIf
    GUIDelete($Angebot)
    call("Angebot_2",($RegNr-1))
    ExitLoop
    endif

    EndSelect
    WEnd

    [/autoit]


    Nun meine Frage:
    Wie kann ich vom markiertem Element, durch den Namen die entsprechende RegNr herrausfinden ?


    Vielen Dank schon mal im Vorraus
    Liebe Grüße
    Chungwarlet

    Einmal editiert, zuletzt von chungwarlet (23. Juni 2013 um 14:44)

  • Wann rufst du die Funktion init auf?
    Hast du dich schonmal ein wenig näher beschäftigt mit SQL/Sqlite?
    Räum mal dein Script ein wenig auf und ein paar unnötige Zeilen entfernen, das bekommt man auch
    alles ein wenig kompakter und somit übersichtlicher hin. Dann kann man auch leichter helfen und muss nicht erstmal ein wenig umschreiben.

  • Die Funktion init() ruf ich am Anfang auf.
    Ich wollte bloß nicht allen Code reinschreiben.

    Mein Problem ist ja, das das Programm Vgl lesen kann, aber es saveReg nicht definiert und ich immer Fehler bekomm,
    saveReg ist nicht vergeben

    [autoit]


    If BitAND(GUICtrlRead($beKu), $GUI_CHECKED) = $GUI_CHECKED Then
    Local $Vgl = GUICtrlRead($Bestkund,$GUI_FOCUS)
    ;Vergleich Namen aus Liste mit ausgewählten Namen(bestehender Kunde)-> gebe RegNr zurück.
    MsgBox(64,"",$Vgl)
    While _SQLite_FetchData($hQuery, $SeNa, False, False) = $SQLITE_OK ; Read Out the next Row
    If (StringCompare ( $SeNa[0], $Vgl,2) = 0) Then
    local $saveReg = $SeNa[1]
    EndIf
    WEnd

    [/autoit]
  • Was soll das $GUI_FOCUS in GUICtrlRead?
    Warum machst du nicht einfach ein SELECT FROM mit WHERE?
    Wieso nimmst du StringCompare und nicht =?
    Wenn du init immer bei Programmstart aufrufst, warum willst du dann immer die Tabellen erstellen. Du hast doch das ganze in einer Datei gespeichert und nix temporär.

  • x Zu init:
    Tabellen werden erstellt wenn noch nicht vorhanden -> Programm auf neuem Computer erstellt neue Datenbank

    x Zu $GUI_FOCUS in GUICtrlRead:
    Das mache ich um das markierte Element auszuwählen. Das klappt auch, denn bei der MsgBox-Kontrollausgabe kommt auch der passende Name raus.

    x Zu StringCompare:
    Ich dachte man kann Variablen mit Strings nicht mit einem '=' vergleichen. Selbst mit einem '=' geht es nicht.

    Wenn ich in der Whileschleife eine MsgBox vor die If-Abfrage reinbaue, wird die nichtmal aufgerufen sonder gleich abgebrochen mit Fehler:
    Call("Angebot2",$saveReg)
    Call("Angebot2",^ ERROR

    -> Die Whileschleife wird nicht durchlaufen, aber warum ?


    EDIT:

    Zitat

    Hast du dich schonmal ein wenig näher beschäftigt mit SQL/Sqlite?


    Nein, ich mach das hier zum ersten Mal. Hab aber auch nirgends im Netz ein brauchbares Tut gefunden.
    Deshalb bitte ich um Verständnis :)