Listview Inhalt in eine SQLite Datenbank schreiben

  • Hallo Leute,

    ich habe ein Problem mit dem schreiben in eine SQLite Datenbank.
    In die letzte Spalte der Datenbank (Spalte 6), wird immer nur der Wert der letzten Zeile der Listview geschrieben. Wenn in der Listview nur eine Zeile eingetragen wurde, dann werden alle Spalten ordnungsgemäß befüllt.

    Jetzt erstmal ein paar vorab Infos:
    OS: WinXP Pro
    AutoIt Version: 3.3.8.1
    SQLite Version: _SQLite_LibVersion=3.7.2

    Der Code meines Skriptes ist der folgende:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <GUIListView.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <TreeViewConstants.au3>
    #include <GuiStatusBar.au3>
    #include <Array.au3>
    #include <Date.au3>
    #include <DateTimeConstants.au3>
    #include <GUIEdit.au3>
    #include <ButtonConstants.au3>
    #include<SQLite.au3>
    #include<SQLite.dll.au3>

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

    ;~ Variable deklarieren
    Global $menu_datei_schliessen
    Global $navigation_index, $StartStatus, $navigation_main, $navigation_main_ausgaben, $navigation_main_versicherungen, $navigation_main_einnahmen, $navigation_main_statistik
    Global $font, $komma, $eur
    Global $buttonHide, $buttonHinzufuegen, $buttonLoeschen
    Global $ListviewCount
    Global $db_data, $db_data_dir

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

    ;Veariable werden gefüllt
    $font = "Arial"
    $komma = "."
    $eur = "EUR"

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

    ;~ Variable mit Anfangswert für die Bearbeitung füllen
    $ListviewCount = 0
    $buttonHinzufuegen = -9999
    $buttonLoeschen = - 9999
    $buttonSpeichern = -9999

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

    ;Datenbank Variable
    $db_data_dir = @ScriptDir & "\data.db"

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

    ; Array für den Inhalt der GUIs
    Global $button, $buttonSchleifeEnde, $ausgabenSchleifenEnde
    Global $ListviewAusgaben

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

    $buttonSchleifeEnde = 2
    $ausgabenSchleifenEnde = 13
    $ListviewAusgabenUeberschrift = 5
    Dim $start[2]
    Dim $button[3]
    Dim $ausgaben[14]
    Dim $ListviewAusgabenUeberschrift[6]
    Dim $versicherungen[1]
    Dim $einnahmen[1]
    Dim $statistik[1]

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

    $ListviewAusgabenUeberschrift[0] = "Datum"
    $ListviewAusgabenUeberschrift[1] = "Laden"
    $ListviewAusgabenUeberschrift[2] = "Betrag"
    $ListviewAusgabenUeberschrift[3] = "Waehrung"
    $ListviewAusgabenUeberschrift[4] = "Bezahlt_mit"
    $ListviewAusgabenUeberschrift[5] = "Bereich"

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

    #Region ### START Koda GUI section ### Form=
    $main = GUICreate("Haushaltsbuch", 950, 700, 192, 114)
    menu()
    start()
    $Label1 = GUICtrlCreateLabel("Haushaltsbuch", 272, 10, 180, 28, $SS_CENTER)
    GUICtrlSetFont(-1, 18, 400, 0, $font)
    navigation()
    _GUICtrlStatusBar_Create($main)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $menu_datei_schliessen
    Exit
    Case $navigation_main
    main()
    Case $navigation_main_ausgaben
    ausgaben()
    Case $navigation_main_versicherungen
    versicherung()
    Case $navigation_main_einnahmen
    einnahmen()
    Case $navigation_main_statistik
    statistik()
    Case $buttonHinzufuegen
    AddListviewItem()
    Case $buttonLoeschen
    DelListViewItem()
    Case $buttonSpeichern
    AddToDatabase()
    EndSwitch
    WEnd

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

    Func menu()
    Dim $menu_datei, $menu_extra
    $menu_datei = GUICtrlCreateMenu("Datei")
    $menu_datei_schliessen = GUICtrlCreateMenuItem("Beenden", $menu_datei)
    $menu_extra = GUICtrlCreateMenu("Extra")
    $menu_extra_aktualisieren = GUICtrlCreateMenuItem("Aktualisieren", $menu_extra)
    $menu_extra_optionen = GUICtrlCreateMenuItem("Optionen", $menu_extra)
    EndFunc

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

    Func navigation()
    Dim $navigation
    $navigation = GUICtrlCreateTreeView(6, 50, 126, 600, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
    $navigation_main = GUICtrlCreateTreeViewItem("Navigation", $navigation)
    $navigation_main_ausgaben = GUICtrlCreateTreeViewItem("Ausgaben", $navigation_main)
    $navigation_main_versicherungen = GUICtrlCreateTreeViewItem("Versicherungen", $navigation_main)
    $navigation_main_einnahmen = GUICtrlCreateTreeViewItem("Einnahmen", $navigation_main)
    $navigation_main_statistik = GUICtrlCreateTreeViewItem("Statistik", $navigation_main)
    GUICtrlSetState($navigation_main, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
    EndFunc

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

    Func start()
    GUICtrlSetFont(10, 400, 0, $font)
    $navigation_index = 0
    $buttonHide = 0
    $Start[0] = "Guten Tag " & @UserName & "." & @CRLF & @CRLF _
    & "Vielen Dank das Sie sich für das Programm Haushaltsbuch entschieden haben." & @CRLF & @CRLF _
    & "Das Programm Haushaltsbuch, wurde für die Übersicht der Privaten Finanzen erstellt." _
    & @CRLF & "Das Haushaltsbuch wurde so einfach wie nur möglich gehalten. Es basiert auf der Einahmen Überschuss Rechnung." _
    & @CRLF & @CRLF _
    & @CRLF & "Sollten Sie mit dem Programm nicht zurecht kommen, wenden Sie sich an mich."
    $start[1] = GUICtrlCreateLabel($Start[0], 145, 50, 400, 400)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    EndFunc

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

    ;~ ########################################################################################################################
    ;~ ######################### Beginn der Funktionen, die über die Navigation aufgerufen werden #############################
    ;~ ########################################################################################################################

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

    Func main()
    $buttonHide = 0
    button()
    Select
    Case $navigation_index = 1
    ;~ GUICtrlSetState($Ausgaben[0], $GUI_HIDE)
    VersteckeAusgabenItems()
    GUICtrlSetState($start[1], $GUI_SHOW)
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    GUICtrlSetState($start[1], $GUI_SHOW)
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    GUICtrlSetState($start[1], $GUI_SHOW)
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    GUICtrlSetState($start[1], $GUI_SHOW)
    EndSelect
    $navigation_index = 0
    EndFunc

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

    Func ausgaben()
    $buttonHide = 1
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    ErstelleAusgabenItems()
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    ErstelleAusgabenItems()
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    ErstelleAusgabenItems()
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    ErstelleAusgabenItems()
    EndSelect
    $navigation_index = 1
    EndFunc

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

    Func versicherung()
    $buttonHide = 1
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    case $navigation_index = 1
    VersteckeAusgabenItems()
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    If $versicherungen[0] = "" Then
    $versicherungen[0] = GUICtrlCreateLabel("Versicherungen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($versicherungen[0], $GUI_SHOW)
    EndIf
    EndSelect
    $navigation_index = 2
    EndFunc

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

    Func einnahmen()
    $buttonHide = 1
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 1
    VersteckeAusgabenItems()
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 4
    GUICtrlSetState($statistik[0], $GUI_HIDE)
    If $einnahmen[0] = "" Then
    $einnahmen[0] = GUICtrlCreateLabel("Einnahmen", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($einnahmen[0], $GUI_SHOW)
    EndIf
    EndSelect
    $navigation_index = 3
    EndFunc

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

    Func statistik()
    $buttonHide = 0
    button()
    Select
    Case $navigation_index = 0
    GUICtrlSetState($start[1], $GUI_HIDE)
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 1
    VersteckeAusgabenItems()
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 2
    GUICtrlSetState($versicherungen[0], $GUI_HIDE)
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    Case $navigation_index = 3
    GUICtrlSetState($einnahmen[0], $GUI_HIDE)
    If $statistik[0] = "" Then
    $statistik[0] = GUICtrlCreateLabel("Statistik", 145,50,120,25)
    GUICtrlSetFont(-1, 12, 400, 0, $font)
    Else
    GUICtrlSetState($statistik[0], $GUI_SHOW)
    EndIf
    EndSelect
    $navigation_index = 4
    EndFunc

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

    ;~ ########################################################################################################################
    ;~ ######################################### Ende der Navigations Funktionen ##############################################
    ;~ ########################################################################################################################

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

    ;~ ########################################################################################################################
    ;~ ####################### Beginn der Funktionen, um GUI Items zu erstellen, auszublenen oder einzublenden ################
    ;~ ########################################################################################################################

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

    Func button()
    Local $i
    If $navigation_index = "" Then
    If $button[0] = "" Then
    $button[0] = GUICtrlCreateButton("Hinzufügen", 860, 142, 82, 25, $BS_CENTER)
    If $button[0] <> 0 Then
    GUICtrlSetState($button[0], $GUI_HIDE)
    $buttonHide = 1
    $buttonHinzufuegen = $button[0]
    EndIf
    EndIf
    IF $button[1] = "" Then
    $button[1] = GUICtrlCreateButton("Löschen", 860, 172, 82, 25, $BS_CENTER)
    If $button[1] <> 0 Then
    GUICtrlSetState($button[1], $GUI_HIDE)
    $buttonLoeschen = $button[1]
    EndIf
    EndIf
    If $button[2] = "" Then
    $button[2] = GUICtrlCreateButton("Speichern", 860, 625, 82, 25, $BS_CENTER)
    If $button[2] <> 0 Then
    GUICtrlSetState($button[2], $GUI_HIDE)
    $buttonSpeichern = $button[2]
    EndIf
    EndIf
    EndIf

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

    Select
    Case $buttonHide = 0
    For $i = 0 To $buttonSchleifeEnde Step 1
    GUICtrlSetState($button[$i], $GUI_HIDE)
    Next
    Case $buttonHide = 1
    If $buttonHide = 1 Then
    For $i = 0 To $buttonSchleifeEnde Step 1
    GUICtrlSetState($button[$i], $GUI_SHOW)
    Next
    EndIf
    EndSelect

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

    EndFunc

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

    Func ErstelleAusgabenItems()
    Local $i
    If $Ausgaben[0] = "" Then
    $Ausgaben[0] = GUICtrlCreateLabel("Ausgaben", 145,50,100,25)
    GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
    $Ausgaben[1] = GUICtrlCreateLabel("Datum", 165, 80, 60,15)
    $Ausgaben[2] = GUICtrlCreateDate("", 145, 98, 80, 20, $DTS_SHORTDATEFORMAT)
    $Ausgaben[3] = GUICtrlCreateLabel("Laden", 265, 80, 100, 15)
    $Ausgaben[4] = GUICtrlCreateCombo("", 230, 98, 100,20)
    $Ausgaben[5] = GUICtrlCreateLabel("Betrag", 345, 80, 50, 15)
    $Ausgaben[6] = GUICtrlCreateInput("", 335, 98, 25, 20, $ES_Number)
    $Ausgaben[7] = GUICtrlCreateLabel($komma, 361, 107, 5, 22)
    $Ausgaben[8] = GUICtrlCreateInput("", 367, 98, 20, 20, $ES_Number)
    $Ausgaben[9] = GUICtrlCreateLabel($eur, 389, 101, 25, 20)
    $Ausgaben[10] = GUICtrlCreateLabel("Bezahlart", 437,80, 80, 15)
    $Ausgaben[11] = GUICtrlCreateCombo("", 419, 98, 100,20)
    $Ausgaben[12] = GUICtrlCreateLabel("Bereich", 547, 80, 80, 15)
    $Ausgaben[13] = GUICtrlCreateCombo("", 524,98, 100, 20)
    $ListviewAusgaben = GUICtrlCreateListView($ListviewAusgabenUeberschrift[0] & '|' & $ListviewAusgabenUeberschrift[1] & '|' & $ListviewAusgabenUeberschrift[2] & '|' & $ListviewAusgabenUeberschrift[3] & '|' & $ListviewAusgabenUeberschrift[4] & '|' & $ListviewAusgabenUeberschrift[5], 145, 123, 705, 482)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 0, 80)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 1, 170)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 2, 80)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 3, 50)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 4, 125)
    _GUICtrlListView_SetColumnWidth($ListviewAusgaben, 5, 196)
    Else
    For $i = 0 to $ausgabenSchleifenEnde Step 1
    GUICtrlSetState($Ausgaben[$i], $GUI_SHOW)
    Next
    GUICtrlSetState($ListviewAusgaben, $GUI_SHOW)
    EndIf
    EndFunc

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

    Func VersteckeAusgabenItems()
    Dim $i
    For $i = 0 to $ausgabenSchleifenEnde Step 1
    GUICtrlSetState($Ausgaben[$i], $GUI_HIDE)
    Next
    GUICtrlSetState($ListviewAusgaben, $GUI_HIDE)
    EndFunc

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

    ;~ ########################################################################################################################
    ;~ ####################### Ende der Funktionen, um GUI Items zu erstellen, auszublenen oder einzublenden ##################
    ;~ ########################################################################################################################

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

    ;~ ########################################################################################################################
    ;~ ############################### Anfang der Funktionen, um Die Listviews zu bearbeiten ##################################
    ;~ ########################################################################################################################

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

    Func AddListviewItem()
    Local $betrag, $AddListView
    $betrag = GUICtrlRead($Ausgaben[6]) & GUICtrlRead($Ausgaben[7]) & GUICtrlRead($Ausgaben[8])
    If GUICtrlRead($Ausgaben[4]) = "" Or GUICtrlRead($Ausgaben[6]) = "" Or GUICtrlRead($Ausgaben[8]) = "" Or GUICtrlRead($Ausgaben[11]) = "" Or GUICtrlRead($Ausgaben[13]) = "" Then
    MsgBox(48, "Warung", "Es sind nicht alle Felder ausgefüllt!" & @CRLF _
    & "Bitte füllen Sie alle Felder aus!")
    Else
    $AddListView = GUICtrlCreateListViewItem(GUICtrlRead($Ausgaben[2]) & '|' & GUICtrlRead($Ausgaben[4]) & '|' & $betrag & '|' & GUICtrlRead($Ausgaben[9]) & '|' & GUICtrlRead($Ausgaben[11]) & '|' & GUICtrlRead($Ausgaben[13]), $ListviewAusgaben)
    If $AddListView <> 0 Then
    ControlSetText("", "", $Ausgaben[4], "")
    ControlSetText("", "", $Ausgaben[6], "")
    ControlSetText("", "", $Ausgaben[8], "")
    ControlSetText("", "", $Ausgaben[11], "")
    ControlSetText("", "", $Ausgaben[13], "")
    $ListviewCount = _GUICtrlListView_GetItemCount($ListviewAusgaben)
    EndIf
    EndIf
    EndFunc

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

    Func DelListViewItem()
    If $ListviewCount > 0 Then
    _GUICtrlListView_DeleteItemsSelected($ListviewAusgaben)
    EndIf
    EndFunc

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

    Func AddToDatabase()
    Dim $i, $k
    Dim $ListViewArray[1][5]
    _SQLite_Startup()
    if FileExists($db_data_dir) Then
    $db_data = _SQLite_Open($db_data_dir)
    For $i = 0 To $ListviewCount -1
    If $i > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][5]
    For $k = 0 To 5
    If $k > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][6]
    $ListViewArray[$i][$k] = _GUICtrlListView_GetItemText($ListviewAusgaben, $i, $k)
    Next
    Next
    _GUICtrlListView_DeleteAllItems($ListviewAusgaben)
    ;~ _ArrayDisplay($ListViewArray, "Array Anzeige")
    ;~ MsgBox(0,"", $ListViewArray[0][5])
    ;~ _SQLite_Exec($db_data, "insert into tbl_ausgaben (" & $ListviewAusgabenUeberschrift[0] & ',' & $ListviewAusgabenUeberschrift[1] & ',' & $ListviewAusgabenUeberschrift[2] & ',' & $ListviewAusgabenUeberschrift[3] & ',' & $ListviewAusgabenUeberschrift[4] & ',' & $ListviewAusgabenUeberschrift[5] & ") VALUES (" & $ListViewArray[0][0] & "," & $ListViewArray[0][1] & "," & $ListViewArray[0][2] & "," & $ListViewArray[0][3] & "," & $ListViewArray[0][4] & "," & $ListViewArray[0][5] & ");")
    For $i = 0 To $ListviewCount -1 Step +1
    _SQLite_Exec($db_data, "insert into tbl_ausgaben (" & $ListviewAusgabenUeberschrift[0] & ',' & $ListviewAusgabenUeberschrift[1] & ',' & $ListviewAusgabenUeberschrift[2] & ',' & $ListviewAusgabenUeberschrift[3] & ',' & $ListviewAusgabenUeberschrift[4] & ',' & $ListviewAusgabenUeberschrift[5] & ") VALUES (" & '''' & $ListViewArray[$i][0] & ''',''' & $ListViewArray[$i][1] & ''',''' & $ListViewArray[$i][2] & ''',''' & $ListViewArray[$i][3] & ''',''' & $ListViewArray[$i][4] & ''',''' & $ListViewArray[$i][5] & '''' & ");" & @CRLF)
    Next
    ;~ _SQLite_Exec($db_data, "insert into tbl_ausgaben (" & $ListviewAusgabenUeberschrift[0] & ',' & $ListviewAusgabenUeberschrift[1] & ',' & $ListviewAusgabenUeberschrift[2] & ',' & $ListviewAusgabenUeberschrift[3] & ',' & $ListviewAusgabenUeberschrift[4] & ',' & $ListviewAusgabenUeberschrift[5] & ") VALUES (2013-01-10," & $ListViewArray[0][1] & "," & $ListViewArray[0][2] & ",'CCC',4444,55555);")
    Else
    $db_data = _SQLite_Open($db_data_dir)
    For $i = 0 To $ListviewCount -1 Step +1
    _SQLite_Exec($db_data, "CREATE TABLE tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[$i][0] & ''',''' & $ListviewAusgabenUeberschrift[$i][1] & ''',''' & $ListviewAusgabenUeberschrift[$i][2] & ''',''' & $ListviewAusgabenUeberschrift[$i][3] & ''',''' & $ListviewAusgabenUeberschrift[$i][4] & ''',''' & $ListviewAusgabenUeberschrift[$i][5] & '''' & ");")
    Next
    EndIf

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

    ;~ Local $d = _SQLite_Exec(-1, "Select rowid,* From tbl_ausgaben", "_select") ; _cb will be called for each row
    Local $d = _SQLite_Exec(-1, "Select * From tbl_ausgaben", "_select") ; _cb will be called for each row

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

    EndFunc

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

    Func _select($aRow)
    For $s In $aRow
    ConsoleWrite($s & @TAB)
    Next
    ConsoleWrite(@CRLF)
    EndFunc

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

    _SQLite_Close($db_data)
    _SQLite_Shutdown()
    ;~ ########################################################################################################################
    ;~ ################################ Ende der Funktionen, um Die Listviews zu bearbeiten ###################################
    ;~ ########################################################################################################################

    [/autoit]

    Eintrag in die Datenbank, wenn 2 Zeilen in der Listview stehen:

    Spoiler anzeigen
    SQL
    19.01.2013	1	2.3	EUR	4		
    19.01.2013	6	7.8	EUR	9	0

    In der ersten Zeile, Spalte 6, fehlt der Wert (5).

    Der Eintrag in die Datenbank, wird der Funktion "AddToDatabase()" ab Zeile 422, erledigt.
    Um den Inhalt der angesprochenen Funktion geht es mir. Ich kann keinen Fehler entdecken. Aber da die Einträge in die Datenbank nicht ordnungsgemäß ausgeführt werden, muss ja irgendwo in der Funktion der Wurm stecken. Ich komme bloss nicht drauf wo der Fehler liegt und brauche eure Hilfe.


    Danke schon mal für eure Hilfe!

    Gruß

    0cool

    Gut das fragen nichts kostet :)

    Einmal editiert, zuletzt von 0cool (29. September 2013 um 18:36)

    • Offizieller Beitrag

    Ohne jetzt ins Detail zu gehen ist mir eines sofort aufgefallen:

    [autoit]

    For $i = 0 To $ListviewCount -1 Step +1
    _SQLite_Exec($db_data, "CREATE TABLE tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[$i][0] & ''',''' & $ListviewAusgabenUeberschrift[$i][1] & ''',''' & $ListviewAusgabenUeberschrift[$i][2] & ''',''' & $ListviewAusgabenUeberschrift[$i][3] & ''',''' & $ListviewAusgabenUeberschrift[$i][4] & ''',''' & $ListviewAusgabenUeberschrift[$i][5] & '''' & ");")
    Next

    [/autoit]

    Was soll das bedeuten? Du erstellst für JEDE Zeile des Listview immer wieder dieselbe Tabelle mit Namen "tbl_ausgaben"? Das ergibt keinen Sinn.

    EDIT:
    Mal schnell aus der Hüfte geschossen, wie diese Funktion aussehen sollte:

    [autoit]

    Func AddToDatabase()
    If $ListviewCount < 1 Then Return
    Local $sSQL = 'BEGIN TRANSACTION;'
    _SQLite_Startup() ; .. UND _SQLite_Shutdown sollten am Programmanfang bzw. -ende stehen, nicht in Funktionen
    ; == nur, wenn Datei nicht existiert wird die Tabelle erstellt
    If Not FileExists($db_data_dir) Then
    ; == nur den SQL-String erstellen, noch nicht ausführen
    $sSQL &= "CREATE TABLE tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[0] & ''',''' & $ListviewAusgabenUeberschrift[1] & ''',''' & $ListviewAusgabenUeberschrift[2] & ''',''' & $ListviewAusgabenUeberschrift[3] & ''',''' & $ListviewAusgabenUeberschrift[4] & ''',''' & $ListviewAusgabenUeberschrift[5] & '''' & ");")
    EndIf
    ; == INSERT zusammenstellen
    For $i = 0 To $ListviewCount -1
    $sSQL &= "insert into tbl_ausgaben ("
    For $k = 0 To 5
    $sSQL &= '"' & _GUICtrlListView_GetItemText($ListviewAusgaben, $i, $k) & '",'
    Next
    $sSQL = StringTrimRight($sSQL, 1) & ");"
    Next
    $sSQL &= "COMMIT;"
    _GUICtrlListView_DeleteAllItems($ListviewAusgaben)
    $db_data = _SQLite_Open($db_data_dir)
    _SQLite_Exec($db_data, $sSQL)

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

    ;~ Local $d = _SQLite_Exec(-1, "Select rowid,* From tbl_ausgaben", "_select") ; _cb will be called for each row
    ;~ Local $d = _SQLite_Exec(-1, "Select * From tbl_ausgaben", "_select") ; _cb will be called for each row

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

    EndFunc

    [/autoit]
  • Hey Bugfix,

    du hast vollkommen recht. Ich hab den Code auchgleich geändert.
    Die Funktion sieht jetzt folgendermaßen aus:

    Spoiler anzeigen
    [autoit]


    Func AddToDatabase()
    Dim $i, $k
    Dim $ListViewArray[1][5]
    _SQLite_Startup()
    if FileExists($db_data_dir) Then
    $db_data = _SQLite_Open($db_data_dir)
    For $i = 0 To $ListviewCount -1
    If $i > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][5]
    For $k = 0 To 5
    If $k > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][6]
    $ListViewArray[$i][$k] = _GUICtrlListView_GetItemText($ListviewAusgaben, $i, $k)
    Next
    Next
    _GUICtrlListView_DeleteAllItems($ListviewAusgaben)
    ;~ _ArrayDisplay($ListViewArray, "Array Anzeige")
    ;~ MsgBox(0,"", $ListViewArray[0][5])
    ;~ _SQLite_Exec($db_data, "insert into tbl_ausgaben (" & $ListviewAusgabenUeberschrift[0] & ',' & $ListviewAusgabenUeberschrift[1] & ',' & $ListviewAusgabenUeberschrift[2] & ',' & $ListviewAusgabenUeberschrift[3] & ',' & $ListviewAusgabenUeberschrift[4] & ',' & $ListviewAusgabenUeberschrift[5] & ") VALUES (" & $ListViewArray[0][0] & "," & $ListViewArray[0][1] & "," & $ListViewArray[0][2] & "," & $ListViewArray[0][3] & "," & $ListViewArray[0][4] & "," & $ListViewArray[0][5] & ");")
    For $i = 0 To $ListviewCount -1 Step +1
    _SQLite_Exec($db_data, "insert into tbl_ausgaben (" & $ListviewAusgabenUeberschrift[0] & ',' & $ListviewAusgabenUeberschrift[1] & ',' & $ListviewAusgabenUeberschrift[2] & ',' & $ListviewAusgabenUeberschrift[3] & ',' & $ListviewAusgabenUeberschrift[4] & ',' & $ListviewAusgabenUeberschrift[5] & ") VALUES (" & '''' & $ListViewArray[$i][0] & ''',''' & $ListViewArray[$i][1] & ''',''' & $ListViewArray[$i][2] & ''',''' & $ListViewArray[$i][3] & ''',''' & $ListViewArray[$i][4] & ''',''' & $ListViewArray[$i][5] & '''' & ");" & @CRLF)
    Next
    ;~ _SQLite_Exec($db_data, "insert into tbl_ausgaben (" & $ListviewAusgabenUeberschrift[0] & ',' & $ListviewAusgabenUeberschrift[1] & ',' & $ListviewAusgabenUeberschrift[2] & ',' & $ListviewAusgabenUeberschrift[3] & ',' & $ListviewAusgabenUeberschrift[4] & ',' & $ListviewAusgabenUeberschrift[5] & ") VALUES (2013-01-10," & $ListViewArray[0][1] & "," & $ListViewArray[0][2] & ",'CCC',4444,55555);")
    Else
    $db_data = _SQLite_Open($db_data_dir)
    _SQLite_Exec($db_data, "CREATE TABLE tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[0] & ''',''' & $ListviewAusgabenUeberschrift[1] & ''',''' & $ListviewAusgabenUeberschrift[2] & ''',''' & $ListviewAusgabenUeberschrift[3] & ''',''' & $ListviewAusgabenUeberschrift[4] & ''',''' & $ListviewAusgabenUeberschrift[5] & '''' & ");")

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

    EndIf

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

    ;~ Local $d = _SQLite_Exec(-1, "Select rowid,* From tbl_ausgaben", "_select") ; _cb will be called for each row
    Local $d = _SQLite_Exec(-1, "Select * From tbl_ausgaben", "_select") ; _cb will be called for each row

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

    EndFunc

    [/autoit]

    Danke für den Hinweis.

    Was ich noch sagen muss ist, das Skript ist noch in der Entwicklung.

    Danke für die Funktion. Ich werde sich sobald ich wieder Zeit hab Testen.


    Für Verbesserungsvorschläge bin ich aber immer offen.


    Gruß

    0cool

    Gut das fragen nichts kostet :)

    • Offizieller Beitrag

    Warum machst du dir doppelte Arbeit?
    Du liest die Daten aus dem Listview und schreibst sie in ein Array. Dann liest du die Daten aus dem Array und schreibst sie in die Datenbank. - Welchen Sinn hat dann bitte das Array, es wird nicht benötigt, du kannst, wie in meinem Entwurf gezeigt, sofort den SQL-String erstellen.
    Und wie in meiner Funktion ersichtlich: Führe nicht nach jedem Schritt eine SQL-Anweisung aus, bei 3 Datensätzen geht das - aber wenn du ein paar hundert hast, verlierst du viel Zeit. Setze, wie gezeigt, einen SQL-String mit allen Anweisungen zusammen und führe ihn in einem einzigen Aufruf aus: SQL-String: "BEGIN TRANSACTION;Befehl;Befehl;Befehl;COMMIT;"

    Und folgender Teil ist auch ohne tiefen Sinn:

    [autoit]

    For $i = 0 To $ListviewCount -1
    If $i > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][5]
    For $k = 0 To 5
    If $k > 0 Then ReDim $ListViewArray[UBound($ListViewArray, 1) +1][6]
    $ListViewArray[$i][$k] = _GUICtrlListView_GetItemText($ListviewAusgaben, $i, $k)
    Next
    Next

    [/autoit]

    Wenn du das Array erstellst, ist doch bereits mit "$ListviewCount " die Anzahl der Elemente bekannt - wofür also ReDim verwenden, erstell das Array von Anfang an in der richtigen Größe.
    Und das ReDim für Spalten ist übrigens komplett falsch. Ein ReDim in Spalten, angewendet auf ein bestehendes Array birgt die Gefahr des Datenverlusts im Array.

  • Hey BugFix,

    lange zeit ist es her seit Du mir geantwortet hast.
    Deine Antwort hat mir sehr geholfen.

    Die funktionierende Funktion sieht jetzt so aus:

    Spoiler anzeigen
    [autoit]


    Func AddToDatabase()
    Dim $i, $k
    Dim $strSQL
    Dim $ListViewArray[1][5]

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

    ; Sollte das Listview keine Einträge haben, wird die Funktion beendet.
    If $ListviewCount < 1 Then Return

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

    ; Wenn die Datenbank existiert wird Sie geöffnet. Wenn nicht wird Sie erstellt.
    if FileExists($db_data_dir) Then
    $db_data = _SQLite_Open($db_data_dir)

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

    Else
    $db_data = _SQLite_Open($db_data_dir)
    _SQLite_Exec($db_data, "CREATE TABLE tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[0] & ''',''' & $ListviewAusgabenUeberschrift[1] & ''',''' & $ListviewAusgabenUeberschrift[2] & ''',''' & $ListviewAusgabenUeberschrift[3] & ''',''' & $ListviewAusgabenUeberschrift[4] & ''',''' & $ListviewAusgabenUeberschrift[5] & '''' & ");")

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

    EndIf

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

    ; SQL String zusammen bauen
    Local $strSQL = 'BEGIN TRANSACTION;'

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

    ; Inset Anweisung zusammenstellen
    For $i = 0 To $ListviewCount -1
    $strSQL &= "INSERT INTO tbl_ausgaben (" & '''' & $ListviewAusgabenUeberschrift[0] & ''',''' & $ListviewAusgabenUeberschrift[1] & ''',''' & $ListviewAusgabenUeberschrift[2] & ''',''' & $ListviewAusgabenUeberschrift[3] & ''',''' & $ListviewAusgabenUeberschrift[4] & ''',''' & $ListviewAusgabenUeberschrift[5] & '''' & ") VALUES ("
    For $k = 0 To 5
    $strSQL &= "'" & _GUICtrlListView_GetItemText($ListviewAusgaben, $i, $k) & "',"
    Next
    $strSQL = StringTrimRight($strSQL, 1) & ");"
    Next

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

    $strSQL &= "COMMIT;"

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

    ; Der SQL String für das Einfügen der Daten in die Datenbank ist fertig zusammengestellt

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

    ; Die Listview wird geleert
    _GUICtrlListView_DeleteAllItems($ListviewAusgaben)

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

    ; Der SQL Befehl wird ausgeführt
    _SQLite_Exec($db_data, $strSQL)

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

    ;~ Local $d = _SQLite_Exec(-1, "Select rowid,* From tbl_ausgaben", "_select") ; _cb will be called for each row
    Local $d = _SQLite_Exec(-1, "Select * From tbl_ausgaben", "_select") ; _cb will be called for each row
    EndFunc

    [/autoit]


    Danke für Deine Hilfe!

    Gruß

    0cool

    Gut das fragen nichts kostet :)