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
#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>
;~ 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
;Veariable werden gefüllt
$font = "Arial"
$komma = "."
$eur = "EUR"
;~ Variable mit Anfangswert für die Bearbeitung füllen
$ListviewCount = 0
$buttonHinzufuegen = -9999
$buttonLoeschen = - 9999
$buttonSpeichern = -9999
;Datenbank Variable
$db_data_dir = @ScriptDir & "\data.db"
; Array für den Inhalt der GUIs
Global $button, $buttonSchleifeEnde, $ausgabenSchleifenEnde
Global $ListviewAusgaben
$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]
$ListviewAusgabenUeberschrift[0] = "Datum"
$ListviewAusgabenUeberschrift[1] = "Laden"
$ListviewAusgabenUeberschrift[2] = "Betrag"
$ListviewAusgabenUeberschrift[3] = "Waehrung"
$ListviewAusgabenUeberschrift[4] = "Bezahlt_mit"
$ListviewAusgabenUeberschrift[5] = "Bereich"
#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 ###
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
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
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
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
;~ ########################################################################################################################
;~ ######################### Beginn der Funktionen, die über die Navigation aufgerufen werden #############################
;~ ########################################################################################################################
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
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
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
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
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
;~ ########################################################################################################################
;~ ######################################### Ende der Navigations Funktionen ##############################################
;~ ########################################################################################################################
;~ ########################################################################################################################
;~ ####################### Beginn der Funktionen, um GUI Items zu erstellen, auszublenen oder einzublenden ################
;~ ########################################################################################################################
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
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
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
Func VersteckeAusgabenItems()
Dim $i
For $i = 0 to $ausgabenSchleifenEnde Step 1
GUICtrlSetState($Ausgaben[$i], $GUI_HIDE)
Next
GUICtrlSetState($ListviewAusgaben, $GUI_HIDE)
EndFunc
;~ ########################################################################################################################
;~ ####################### Ende der Funktionen, um GUI Items zu erstellen, auszublenen oder einzublenden ##################
;~ ########################################################################################################################
;~ ########################################################################################################################
;~ ############################### Anfang der Funktionen, um Die Listviews zu bearbeiten ##################################
;~ ########################################################################################################################
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
Func DelListViewItem()
If $ListviewCount > 0 Then
_GUICtrlListView_DeleteItemsSelected($ListviewAusgaben)
EndIf
EndFunc
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
;~ 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] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _select($aRow)
For $s In $aRow
ConsoleWrite($s & @TAB)
Next
ConsoleWrite(@CRLF)
EndFunc
_SQLite_Close($db_data)
_SQLite_Shutdown()
;~ ########################################################################################################################
;~ ################################ Ende der Funktionen, um Die Listviews zu bearbeiten ###################################
;~ ########################################################################################################################
Eintrag in die Datenbank, wenn 2 Zeilen in der Listview stehen:
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