Alinas_SQLite_BuchVw ist ein AutoIt-Listview, neben Editfeld und Gui eine weitere Möglichkeit seine Datenbankinhalte zu präsentieren. Also eine Sichtweise, die uns aus Officeprogrammen geläufig ist, die nun mit der Funktionalität von relationalen Datenbanken einhergeht.
In diesem Anwendungsbeispiel handelt es sich um eine Datenbank mit einer einzelnen Tabelle, in der eine Büchersammlung verwaltet werden soll. Beim Start der Sammlung soll die Tabelle der Datenbank einige Eckdaten aufnehmen, z.B. ID, Titel, Autor, Erscheinungsdatum und die ISBN.
Das Datum –
Mit dem SQL-Befehl “SELECT date(‘now’);” wird nicht nur das aktuelle Datum angezeigt, sondern auch das SQLite interne Datumsformat (YYYY-MM-DD), das in diesem Fall verwendet wird.
Die Bedienung
ist denkbar einfach und schnell erklärt. Nach dem Start des Programms wird die DB mit “DB laden” geladen.
Die Suche funktioniert so, den Suchbegriff eingeben und im Combofeld hier “Titel” voreingestellt eine Auswahl treffen. Nach dem Klick auf “Suche starten” erscheint die Ausgabe im ListView. Zur DB zurück mit “DB laden”.
Um einen einzelnen Datensatz zu bearbeiten, wechselt man in den Bearbeitungsmodus. Bei einem Rechtsklick auf den jeweiligen Datensatz wird dieser in die Eingabefelder eingefügt und man kann prüfen, ob man eventuell in der Zeile verrutscht ist. Hier können die Datensätze auch eingegeben, geändert oder gelöscht werden. Bevor es losgeht aber erst einmal ein Backup mit “DB BackUp”, nun erhält man eine Txt-Datei, die auch von einem Officeprogramm eingelesen (Daten-Import) werden kann.
Edit siehe Post #3: Download "sqlite3xx_dll.au3" :
http://ritzelrocker04.bplaced.net/wordpress/sqli…lite-starterlv/
PS: Schöne Feiertage!
#Region ;************ Includes ************
#include <Date.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <GuiStatusBar.au3>
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <GuiListView.au3>
#include <String.au3>
#include <SQLite.au3>
#include "sqlite3101_dll.au3"
#EndRegion ;************ Includes ************
Global $cboSerch, $iptSerch
Global Const $asWDAYger[7] = ["Sonntag, ", "Montag, ", "Dienstag, ", "Mittwoch, ", "Donnerstag, ", "Freitag, ", "Samstag, "]
$Buchverwaltung = GUICreate("Alinas Buchverwaltung", 1125, 700)
$Label = GUICtrlCreateLabel("~ ~ ~ B U C H V E R W A L T U N G ~ ~ ~", 0, 8, 1125, 28, 0x01) ; $SS_CENTER=0x01
GUICtrlSetFont(-1, 16, 800, 0, "Arial")
GUICtrlSetColor(-1, 0x0000FF)
Global Const $sHeader = "ID|Titel|Autor|Verlag|Genre|Einband|ISBN|" _
& "Preis|Erscheinungsdatum|Seiten|Lagerplatz|Serie|Lfd_Nr|" _
& "Ausgeliehen_an|Ausgeliehen_am|Ausgeliehen_bis|Bestellt|Gelesen|Note|Zusatz|Informationen"
;
Global $aHeader = StringSplit($sHeader, '|')
$ListView = GUICtrlCreateListView($sHeader, 0, 40, 1125, 220)
GUICtrlSetBkColor(-1, 0xFFFFFF) ; Color weiß
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
;
Global $GetHandleLV = GUICtrlGetHandle($ListView)
_GUICtrlListView_SetColumn($GetHandleLV, 0, $aHeader[1], 50, 1)
_GUICtrlListView_SetColumn($GetHandleLV, 1, $aHeader[2], 160, 0)
_GUICtrlListView_SetColumn($GetHandleLV, 6, $aHeader[7], 120, 1)
_GUICtrlListView_SetColumn($GetHandleLV, 7, $aHeader[8], 80, 1)
_GUICtrlListView_SetColumn($GetHandleLV, 8, $aHeader[9], 130, 1)
_GUICtrlListView_SetColumn($GetHandleLV, 9, $aHeader[10], 50, 1)
_GUICtrlListView_SetColumn($GetHandleLV, 14, $aHeader[15], 120, 1)
_GUICtrlListView_SetColumn($GetHandleLV, 15, $aHeader[16], 120, 1)
;
$ContextMenu = GUICtrlCreateContextMenu($ListView)
$MenuItem = GUICtrlCreateMenuItem("Datensatz bearbeiten", $ContextMenu)
;
#Region ### Main Area ###
Global $aCtrlLabel[21], $aCtrlInput[21]
$aCtrlLabel[0] = GUICtrlCreateLabel($aHeader[1], 10, 272, 150, 22)
$aCtrlInput[0] = GUICtrlCreateInput("0", 170, 272, 180, 26)
;
For $i = 1 To 6
$aCtrlLabel[$i] = GUICtrlCreateLabel($aHeader[$i + 1], 10, 272 + $i * 35, 150, 22)
$aCtrlInput[$i] = GUICtrlCreateInput($i, 170, 272 + $i * 35, 360, 26)
Next
;
For $j = 7 To 12
$aCtrlLabel[$j] = GUICtrlCreateLabel($aHeader[$j + 1], 10 + Mod($j, 2) * 290, 515 + Int(($j - 7) / 2) * 35, 150, 22)
$aCtrlInput[$j] = GUICtrlCreateInput($j, 170 + Mod($j, 2) * 240, 515 + Int(($j - 7) / 2) * 35, 120, 26)
Next
;
For $k = 13 To 19
$aCtrlLabel[$k] = GUICtrlCreateLabel($aHeader[$k + 1], 620, 272 + ($k - 13) * 33, 120, 22)
$aCtrlInput[$k] = GUICtrlCreateInput($k, 750, 272 + ($k - 13) * 33, 120, 26)
Next
;
For $m = 0 To 19
GUICtrlSetFont($aCtrlLabel[$m], 12, 400, 0, "Arial")
GUICtrlSetFont($aCtrlInput[$m], 12, 400, 0, "Arial")
Next
;Information
$aCtrlLabel[20] = GUICtrlCreateLabel($aHeader[20 + 1], 895, 272, 100, 22)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$aCtrlInput[20] = GUICtrlCreateEdit("AA_info 20", 895, 300, 217, 160)
;
$btnUpdate = GUICtrlCreateButton("DS Update", 895, 470, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$btnDelete = GUICtrlCreateButton("DS Löschen", 1010, 470, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
;Suche
$iptSearch = GUICtrlCreateInput("Suchen nach >>>", 620, 510, 492, 26)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
$cboSearch = GUICtrlCreateCombo("Titel", 620, 545, 241, 25, BitOR($GUI_SS_DEFAULT_COMBO, $CBS_DROPDOWNLIST))
GUICtrlSetData(-1, "Autor|Verlag")
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$btnSearch = GUICtrlCreateButton("Suche starten", 871, 545, 241, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
;
$btnDBladen = GUICtrlCreateButton("Datenbank laden", 871, 583, 241, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$btnClear = GUICtrlCreateButton("Eingabefelder leeren", 620, 583, 241, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
;
Const $trR = _StringRepeat("-", 368)
$lblBottomLine = GUICtrlCreateLabel($trR, 10, 615, 1110, 8)
#EndRegion ### Main Area ###
;
#Region ### Bottom Area ###
Global $aCtrllbl[3], $aCtrlipt[3], $aLblTxt[3] = ["Buchanzahl:", "Ges. Seitenzahl:", "Ges. Buch NP:"] ;"Büchermenge:"
For $l = 0 To 2
$aCtrllbl[$l] = GUICtrlCreateLabel($aLblTxt[$l], 10 + ($l) * 260, 640, 120, 22)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$aCtrlipt[$l] = GUICtrlCreateInput($l, 140 + ($l) * 260, 638, 120, 26, 0x0002) ; $ES_RIGHT=0x0002
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
Next
;
$btnSave = GUICtrlCreateButton("Speichern", 1010, 635, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
$btnBackUp = GUICtrlCreateButton("DB BackUp", 895, 635, 105, 28)
GUICtrlSetFont(-1, 12, 400, 0, "Arial")
#EndRegion ### Bottom Area ###
;
Global $tatusBar = _GUICtrlStatusBar_Create($Buchverwaltung)
;
GUISetState(@SW_SHOW)
;
_timeStatus() ; Funktion aufrufen sofortige einmalige Ausführung nach Programmstart
AdlibRegister('_timeStatus', 1000) ; Start alle 1000 milisec.
;
_SQLite_Startup(@ScriptDir & "\sqlite3.dll", False, 1) ; BugFix Idee, da DLL ja nicht mehr mitgeliefert wird
ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)
Global $g_db_Database = _SQLite_Open(@ScriptDir & "\buchverwaltung.rr04")
;
Global $tatusBar_PartsWidth[3] = [450, 900, -1]
_GUICtrlStatusBar_SetParts($tatusBar, $tatusBar_PartsWidth)
_GUICtrlStatusBar_SetText($tatusBar, " _SQLite_LibVersion = " & _SQLite_LibVersion(), 0)
_GUICtrlStatusBar_SetText($tatusBar, " " & $asWDAYger[@WDAY - 1] & _DateTimeFormat(_NowCalc(), 2), 1)
_GUICtrlStatusBar_SetMinHeight($tatusBar, 20)
;
;~ ### Die Tabelle löschen, wenn vorhanden. ###
_SQLite_Exec(-1, "DROP TABLE IF EXISTS Buchverwaltung;")
;~ ### Die Tabelle erstellen, wenn nicht vorhanden. ###
_SQLite_Exec($g_db_Database, "CREATE TABLE IF NOT EXISTS Buchverwaltung(ID INTEGER PRIMARY KEY AUTOINCREMENT,Titel,Autor,Verlag,Genre,Einband,ISBN,Preis,Erscheinungsdatum,Seiten,Lagerplatz,Serie,Lfd_Nr,Ausgeliehen_an,Ausgeliehen_am,Ausgeliehen_bis,Bestellt,Gelesen,Note,Zusatz,Information);")
;
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'13 Tage','Giambanco, Valentina','Droemer Knaur','Thriller','Hardcover','978-3426513996','14.99','2014-03-03','576','R1-F2','','','Thomas','2015-11-01','2016-01-01','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Abgründe','Strobel, Arno','Loewe','Thriller-J','Taschenbuch','978-3785578643','9.95','2014-03-10','240','R1-F2','','','','','','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Bedroht','Koppen, Hans','Heyne','Thriller','Taschenbuch','978-3453268012','14.99','2013-03-27','411','R1-F2','','','','','','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Agent 6','Smith, Tom Rob','Goldmann','Thriller','Taschenbuch','978-3442546770','9.99','2011-09-14','540','R1-F2','','','','','','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Belladonna','Slaughter, Karin','rororo','Thriller','Taschenbuch','978-3499239140','6.00','2003-03-03','413','R1-F1','','','','','','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Bis zum letzten Atemzug','Baldacci, David','Bastei Lübbe','Thriller','Taschenbuch','978-3404165537','9.99','2011-04-01','574','R1-F2','','','','','','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Bittere Wunden','Slaughter, Karin','blanvalet','Thriller','Hardcover','978-3764505172','19.99','2014-09-01','576','R1-F1','','','','','','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Datenbanken','Anton, Autor','Heyne','Fachbuch','Hardcover','978-3453268017','49.99','2013-03-27','411','R1-F2','','','Max','2015-11-01','2016-12-31','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'Latex','Antonow, E.','Galileo','Fachbuch','Hardcover','978-3453268021','24.99','2011-01-01','411','R1-F2','','','Martin','2012-10-01','2013-02-15','','','..','..','..');")
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL,'C Programmieren','Erlenkötter, H.','rororo','Fachbuch','Hardcover','978-3453268010','11.99','2013-10-01','411','R1-F2','','','Lutz','2015-02-01','2016-10-13','','','..','..','..');")
;
_SQLite_CountRows('buchverwaltung')
;
While True
Switch GUIGetMsg()
Case -3
_Exit()
Case $ListView
_GUICtrlListView_SortItems($ListView, GUICtrlGetState($ListView))
Case $btnSave
_DsInsert()
_ListViewFill()
_iptClear()
_SQLite_CountRows('buchverwaltung')
Case $btnDelete
_DsDelete()
_ListViewFill()
_SQLite_CountRows('buchverwaltung')
Case $btnUpdate
_DsUpdate()
_ListViewFill()
Case $btnSearch
_ListViewFill("SELECT ROWID,* From Buchverwaltung WHERE " & GUICtrlRead($cboSearch) & " LIKE '" & GUICtrlRead($iptSearch) & "';")
Case $btnDBladen
_ListViewFill()
Case $btnClear
_iptClear()
Case $btnBackUp
_DB_BackUp()
Case $MenuItem
_iptClear()
_ListView2ipt()
EndSwitch
WEnd
;
Func _timeStatus()
Local $zeit = _DateTimeFormat(_NowCalc(), 5)
_GUICtrlStatusBar_SetText($tatusBar, " Uhrzeit: " & $zeit, 2)
EndFunc ;==>_timeStatus
;
Func _ListViewFill($QLite = "SELECT ROWID,* FROM Buchverwaltung;")
Local $hQuery, $aRow
_GUICtrlListView_DeleteAllItems($ListView)
;~ _SQLite_Query(-1, "SELECT ROWID,* FROM Buchverwaltung;", $hQuery)
_SQLite_Query(-1, $QLite, $hQuery)
While _SQLite_FetchData($hQuery, $aRow, False, False) = $SQLITE_OK ; Read Out the next Row
GUICtrlCreateListViewItem(_ArrayToString($aRow, '|', 1, 21), $ListView)
GUICtrlSetBkColor(-1, 0xF0E68C) ; (0xF9F9F9) helles Grau (0xB9D1EA) helles blau (0xF0E68C)
WEnd
_SQLite_QueryFinalize($hQuery)
_GUICtrlListView_RegisterSortCallBack($ListView) ; CallBack registrieren zum sortieren
EndFunc ;==>_ListViewFill
;
Func _Exit() ; Datenbank schließen und down.
_GUICtrlListView_UnRegisterSortCallBack($ListView)
_SQLite_Close($g_db_Database)
_SQLite_Shutdown()
Exit
EndFunc ;==>_Exit
; DS löschen
Func _DsDelete()
_SQLite_Exec(-1, "DELETE From Buchverwaltung WHERE ID = " & GUICtrlRead($aCtrlInput[0]) & ";")
EndFunc ;==>_DsDelete
;
Func _DsUpdate()
_SQLite_Exec(-1, "UPDATE Buchverwaltung SET Titel = '" & GUICtrlRead($aCtrlInput[1]) & "', Autor = '" _
& GUICtrlRead($aCtrlInput[2]) & "', Verlag = '" & GUICtrlRead($aCtrlInput[3]) & "', Genre = '" _
& GUICtrlRead($aCtrlInput[4]) & "', Einband = '" & GUICtrlRead($aCtrlInput[5]) & "', ISBN = '" _
& GUICtrlRead($aCtrlInput[6]) & "', Preis = '" & GUICtrlRead($aCtrlInput[7]) & "', Erscheinungsdatum = '" _
& GUICtrlRead($aCtrlInput[8]) & "', Seiten = '" & GUICtrlRead($aCtrlInput[9]) & "', Lagerplatz = '" _
& GUICtrlRead($aCtrlInput[10]) & "', Serie = '" & GUICtrlRead($aCtrlInput[11]) & "', Lfd_Nr = '" _
& GUICtrlRead($aCtrlInput[12]) & "', Ausgeliehen_an = '" & GUICtrlRead($aCtrlInput[13]) & "', Ausgeliehen_am = '" _
& GUICtrlRead($aCtrlInput[14]) & "', Ausgeliehen_bis = '" & GUICtrlRead($aCtrlInput[15]) & "', Bestellt = '" _
& GUICtrlRead($aCtrlInput[16]) & "', Gelesen = '" & GUICtrlRead($aCtrlInput[17]) & "', Note = '" _
& GUICtrlRead($aCtrlInput[18]) & "', Zusatz = '" & GUICtrlRead($aCtrlInput[19]) & "', Information = '" _
& GUICtrlRead($aCtrlInput[20]) & "' WHERE ID = " & GUICtrlRead($aCtrlInput[0]) & ";")
EndFunc ;==>_DsUpdate
;
Func _DsInsert()
_SQLite_Exec(-1, "INSERT INTO Buchverwaltung VALUES(NULL, '" & GUICtrlRead($aCtrlInput[1]) & "','" _
& GUICtrlRead($aCtrlInput[2]) & "','" & GUICtrlRead($aCtrlInput[3]) & "','" & GUICtrlRead($aCtrlInput[4]) _
& "','" & GUICtrlRead($aCtrlInput[5]) & "','" & GUICtrlRead($aCtrlInput[6]) & "','" & GUICtrlRead($aCtrlInput[7]) _
& "','" & GUICtrlRead($aCtrlInput[8]) & "','" & GUICtrlRead($aCtrlInput[9]) & "','" & GUICtrlRead($aCtrlInput[10]) _
& "','" & GUICtrlRead($aCtrlInput[11]) & "','" & GUICtrlRead($aCtrlInput[12]) & "','" & GUICtrlRead($aCtrlInput[13]) _
& "','" & GUICtrlRead($aCtrlInput[14]) & "','" & GUICtrlRead($aCtrlInput[15]) & "','" & GUICtrlRead($aCtrlInput[16]) _
& "','" & GUICtrlRead($aCtrlInput[17]) & "','" & GUICtrlRead($aCtrlInput[18]) & "','" & GUICtrlRead($aCtrlInput[19]) _
& "','" & GUICtrlRead($aCtrlInput[20]) & "');")
EndFunc ;==>_DsInsert
;
Func _ListView2ipt()
;~ MsgBox(0, "Information", "Selected Mark: " & _GUICtrlListView_GetSelectionMark($ListView))
Local $electionMark = _GUICtrlListView_GetSelectionMark($ListView)
If $electionMark > -1 Then
Local $aLVitem = _GUICtrlListView_GetItemTextArray($ListView, $electionMark)
For $i = 1 To $aLVitem[0]
;~ MsgBox(0, "Information", "ItemTextArray: " & $aIpt[$i-1] & " " & $aLVitem[$i])
GUICtrlSetData($aCtrlInput[$i - 1], $aLVitem[$i])
Next
EndIf
EndFunc ;==>_ListView2ipt
;
Func _iptClear()
For $i = 0 To 20
GUICtrlSetData($aCtrlInput[$i], "")
Next
EndFunc ;==>_iptClear
;
;===================================================================================================
; Function Name....: _SQLite_CountRows
; Description......: Ermittelt die Anzahl von Datensätzen für eine Tabelle
; Parameter(s).....: $_sTable Tabellenname
; Requirement(s)...: Eine mit _SQLite_Open() geöffnete DB
; .................: #include <SQLite.au3>
; Return Value(s)..: Erfolg: Anzahl der Datensätze
; .................: Fehler: -1 @error = 1, @extended = SQLite-@error
; Author(s)........: BugFix (bugfix@autoit.de)
;===================================================================================================
Func _SQLite_CountRows($_sTable)
Local $hQuery, $aQuery, $iRet = 0, $iErr
If $SQLITE_OK <> _SQLite_Query(-1, "SELECT count(*) FROM " & $_sTable & ";", $hQuery) Then
$iErr = _SQLite_ErrCode()
_SQLite_QueryFinalize($hQuery)
Return SetError(1, $iErr, -1)
EndIf
While _SQLite_FetchData($hQuery, $aQuery) = $SQLITE_OK
$iRet = $aQuery[0]
WEnd
_SQLite_QueryFinalize($hQuery)
;~ Return $iRet
GUICtrlSetData($aCtrlipt[0], $iRet)
EndFunc ;==>_SQLite_CountRows
;
Func _DB_BackUp()
Local $BackUpFolder = @ScriptDir & "\_BackUps"
If Not FileExists($BackUpFolder) Then DirCreate($BackUpFolder)
Local $hFileOpen = FileOpen($BackUpFolder & "\" & @YEAR & "-" & @MON & "-" & @MDAY & "_BuchVw.db.txt", 2)
If $hFileOpen = -1 Then Exit MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
Local $aResult, $iRows, $iColumns
Local $iRval = _SQLite_GetTable2d(-1, "SELECT * FROM Buchverwaltung;", $aResult, $iRows, $iColumns)
FileWriteLine($hFileOpen, $sHeader)
For $iR = 1 To $iRows
$sText = ""
For $iC = 0 To $iColumns - 1
$sText &= $aResult[$iR][$iC]
If $iC < $iColumns - 1 Then $sText &= "|"
Next
FileWriteLine($hFileOpen, $sText)
Next
FileClose($hFileOpen)
MsgBox(64, "Info", "DB BackUp ist fertig !", 3)
EndFunc ;==>_DB_BackUp
; Ende
Alles anzeigen