Beiträge von RR04

    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.…torials/sqlite-starterlv/


    PS: Schöne Feiertage!


    So jetzt aber, versuch es mal!
    Ich mache das mit Wiedervorlage in die Inputfelder und der Nutzer hat noch einmal Zeit zum Überlegen (in Zeile verrutscht). Jetzt brauche ich die ID nur aus dem Inputfeld auslesen.

    AutoIt
    ; DS löschen
    Func _DsDelete()
    	$electionMark = _GUICtrlListView_GetSelectionMark($ListView)
    	MsgBox(0, "", $electionMark)
    	$ItemText = _GUICtrlListView_GetItemText($ListView, $electionMark)
    	MsgBox(0, "", $ItemText)
    	_SQLite_Exec(-1, "DELETE From Buchverwaltung WHERE ID = " & $ItemText & "")
    	_ListViewFill()
    EndFunc   ;==>_DsDelete

    da Alina auch eine sortierfunktion eingebaut hat, die die Listview mischt.

    Das hat mich auf die Idee gebracht.

    Es sollte so funktionieren:

    AutoIt
    ; DS löschen
    Func _DsDelete()
    	Local $sel = _GUICtrlListView_GetSelectedIndices($listview)
    ;~ 	MsgBox(0, "SelectedIndices", $sel)
    	If $sel <> -1 Then
    		_SQLite_Exec(-1, "DELETE From Buchverwaltung WHERE ROWID = " & $sel & "")
    	EndIf
    	_ListViewFill()
    EndFunc   ;==>_DsDelete

    @Lina,
    wenn Du neu startest werden Deine übungsdaten neu eingegeben!?


    Zur Probe lasse ich den Datensatz 5 löschen - Alles OK !

    AutoIt
    Func _DsDelete()
    ;~ ### zB. Datensatz 5 wird gelöscht ###
    	_SQLite_Exec(-1, "DELETE From Buchverwaltung WHERE ROWID = 5")
    	_ListViewFill()
    EndFunc   ;==>_DsDelete

    @Lina,
    hatte vorhin keine Zeit mehr, war im Büro. Das Einfügen funktioniert schon.


    @Lina



    11.12.2015


    ID|Titel|Autor|Verlag|E-Datum|Genre|Preis|Einband|ISBN|Seiten|Lager|Serie|Bestellt|Gelesen|Note|Zusatz|Information
    ID INTEGER PRIMARY KEY AUTOINCREMENT,Titel,Autor,Verlag,Erscheinungsdatum,Genre,Preis,Einband,ISBN,Seiten,Lagerplatz, Serie,Bestellt,Gelesen,Note,Zusatz,Information,Ausgeliehen_an,Ausgeliehen_am,Ausgeliehen_bis


    Hier stimmt was nicht in den Zeilen 22 und 178 !?


    ;~ [user='994']Alina[/user]
    ;~ Die Punkte zu 2 sind eigentlich Gestaltungssachen im Bereich von Autoit,
    ;~ also ob ein Hotkey oder ein "&" eingebaut wird.


    ;~ Zahlen:
    ;~ Zahlen finden sich im Beispiel SQLite-Listview.
    ;~ Hier kann ein bestimmter Zahlenbereich angezeigt werden.


    _SQLite_GetTable2d(-1, "Select * From BeispielDB WHERE Summe >= 100 AND Summe <= 600", $aResult, $iRows, $iColumns) ;i Zahlenbereich anzeigen


    ;~ Direkte Sortierabfragen haben immer mit "ORDER BY" zutun.
    ;~ Sortiert wird aufsteigend, absteigend und
    ;~ auch über mehrere Spalten. Diese Funktionalität bringt SQLite schon mit.


    _SQLite_GetTable2d(-1,"SELECT * FROM BeispielDB ORDER BY Name DESC", $aResult, $iRows, $iColumns) ;i sortieren über eine Spalte, Abfsteigend => DESC
    _SQLite_GetTable2d(-1,"SELECT * FROM BeispielDB ORDER BY Name, Vorname", $aResult, $iRows, $iColumns) ;i sortieren über zwei Spalten


    _SQLite_GetTable2d(-1, "SELECT * FROM BeispielDB ORDER BY Summe", $aResult, $iRows, $iColumns) ;i A-ufsteigend => ASC
    _SQLite_GetTable2d(-1, "SELECT * FROM BeispielDB ORDER BY Summe ASC", $aResult, $iRows, $iColumns) ;i A-ufsteigend => ASC
    _SQLite_GetTable2d(-1, "SELECT * FROM BeispielDB ORDER BY Summe DESC", $aResult, $iRows, $iColumns) ;i Abfsteigend => DESC


    ;~ Datum:
    ;~ Intern verwendet SQLite das Format "2010-12-30".
    ;~ Datum und Zeit Funktionen sind hier gut beschrieben: http://www.sqlite.org/lang_datefunc.html
    ;~ Ende

    @Lina


    Zu den aktuellen Beispielen:
    1.)
    Der Button "Alle Datensätze anzeigen"
    setzt einen bestimmten Befehl ab (SELECT * FROM BeginnerDB). Die ganzen Spalten der Tabelle werden ausgewählt und angezeigt. Ihn werden wir im Verlauf öfter brauchen, um Änderungen anzeigen zulassen.
    2.)
    Beim Button "Auswahl nach Eingabe"
    gibt es die Möglichkeit eine Art Filter anzugeben. Den Namen, den Anfangsbuchstaben des Namens, mit einem m im Namen oder mit Unterstrichen fals die Schreibweise von "Meier" abweicht (z.B.: "Meier, m%, %m%, M___r").
    3.)
    Die "Telefonnr. eingeben"
    und die ID des Datensatzes ändern nur die Telefonnummer, andere Einträge sind nicht betroffen. Der SQL-Befehl "Update" steckt hier dahinter und wird, dann auch angezeigt.
    4.)
    Datensätze
    Datenbanken dienen zum Speichern großer Datenmengen. Das schließt Buch-, Musik-, Videosammlungen, Artikelverw. oder die klassische Adressenkartei nicht aus. Doch wir sollten größer denken. Börse, Banken und Internet machen es vor. So ist es auch möglich, ein ganzes Kaufhaus abzubilden. Die Warenannahme mit Lieferanten, eine Etage mit Schuhen, ja noch eine Etage mit Handtaschen, aber auch Personalabteilung und Buchhaltung dürfen nicht fehlen. Die Daten werden in den dafür angelegten Tabellen der relationalen Datenbank unsortiert gespeichert.


    Im Beispiel SQLite-Listview wird ein Beispiel mit Zahlen gezeigt. Es beruht auf einer anderen Tabelle ("ID,Name, Vorname,Summe").
    Die Darstellung kann vielseitig sein. Hier bereits gezeigt ein einfaches Editfeld und ein Listview, doch auch eine Eigabemaske mit Inpufeldern ist möglich.


    Ich empfehle das Beilegen der aktuellen sqlite3.dll zu den Skripten (z.B. ins @ScriptDir).


    Seht selbst, wie SQLite reagiert!

    Hi,
    ein Beispiel:


    #AutoIt3Wrapper_Au3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
    _main()
    Func _main()
    Local $input, $nMsg, $result, $aBtn[20]
    Local $aBtnLbl[20] = ["7", "8", "9", " / ", "4", "5", "6", " * ", "1", "2", "3", " - ", ".", "0", "^", " + ", "(", ")", "Clear", "="]
    GUICreate("Mod-TRechner-Tut", 235, 325)
    $input = GUICtrlCreateInput("", 10, 10, 215, 30, BitOR(0x0800, 0x0002)) ; $ES_READONLY $ES_RIGHT
    For $k = 0 To 19
    $aBtn[$k] = GUICtrlCreateButton($aBtnLbl[$k], 10 + Mod($k, 4) * 55, 50 + Int($k / 4) * 55, 50, 50)
    Next


    GUISetState(@SW_SHOW)


    Do
    $nMsg = GUIGetMsg()
    For $i = 0 To 18
    If $nMsg = $aBtn[$i] Then GUICtrlSetData($input, GUICtrlRead($input) & $aBtnLbl[$i])
    Next
    If $nMsg = $aBtn[19] Then
    $result = Execute(StringRegExpReplace(GUICtrlRead($input), '[^\.\(\)\*\/\-\+\d]', ''))
    ;~ $result = Execute(GUICtrlRead($input))
    If $result == "1.#INF" Or $result == "-1.#IND" Then $result = "Error"
    GUICtrlSetData($input, $result)
    EndIf
    If $nMsg = $aBtn[18] Then GUICtrlSetData($input, "")
    Until $nMsg = -3
    EndFunc ;==>_main
    ; Ende

    Jescho


    Danke für Dein Lob und Interesse.


    Die von Dir ausgemachten %-Zeichen sind, in diesem Fall, Platzhalter/Wildcards. Sie gehören direkt zur SELECT-Abfrage von SQLite. Im Spoiler SQL habe ich diese Abfragen hinzugefügt und kommentiert.


    Ein Listview
    ist nur die Präsentation derselben Daten auf eine andere Art. Einem Beginner würde, dass den Blick auf das Wesentliche verstellen. So habe ich SQLite-Listview mit der Abfrage nach den Summen zwischen 100 und 600 separat eingefügt. ;)

    Der Einstieg in das Thema SQLite und die Anwendung in AutoIt.


    Will man eine Datenbank installieren. Dann hat man schnell das Gefühl, es wird ein ganzes Betriebssystem installiert,
    das auch noch die Performance des Systems beeinflusst.


    Bei SQLite ist das nicht der Fall, denn SQLite arbeitet auf Dateibasis. Aber auch hier spricht man SQL. Die Standards von 1992 werden unterstützt und man hat das Handling einer relationalen Datenbank. Heute befinden sich SQLite-Datenbanken bereits in Internetbrowsern und Handys, so gehört SQLite auch zum "Lieferumfang" von AutoIt.


    Dieses Tutorial soll in zweifacher Hinsicht als Einstieg in SQLite dienen.
    Das Skript zeigt einen möglichen Aufbau sowie die datenbankrelevanten Funktionen. Diese sind mit dem Vorzeichen "Ds"
    für Datensatz gekennzeichnet.
    Mit dem Programm hingegen ist man in der Lage eine kleine Beispieldatenbank, wie in einer Sandbox, zu führen. Es wird
    sichtbar welche Befehle hinter den einzelnen Button stecken und was sie bewirken. Nicht alle Befehle lösen eine
    Aktion aus, die sichtbar wird. Auch fehlende oder falsche Eingaben sind möglich.


    Seht selbst, wie SQLite reagiert.




    Hi und herzlich Willkommen!
    Hier ein Beispiel mit Kommentaren. ;)


    SQLite - Datenbankinhalte aufbereiten und in einem dynamischen Listview darstellen. ;)


    Hi!
    Schöne Idee, so kannst Du es leichter handhaben (Einbau in eine Statusleiste z.B.). ;)


    MsgBox(0, "_ramGetUsagePercent", StringFormat("RAM Auslastung : %d%", _ramGetUsagePercent()))
    Func _ramGetUsagePercent()
    Local $aMem = MemGetStats()
    Return $aMem[0]
    EndFunc ;==>_ramUsagePercent
    ; Ende