forum.technik-hobby.de
Listview-Datenbank - Druckversion

+- forum.technik-hobby.de (https://forum.technik-hobby.de)
+-- Forum: AutoIt (https://forum.technik-hobby.de/forum-1.html)
+--- Forum: Scripte (https://forum.technik-hobby.de/forum-3.html)
+--- Thema: Listview-Datenbank (/thread-18.html)



Listview-Datenbank - Gorathan - 30.05.2017

Früher (mit weniger Erfahrung) hielt ich es für eine gute Idee, eine Datenbank ausschließlich mit einem Listview zu verwalten.
Also die Daten direkt in das Listview eintragen, dort sortieren und dort suchen. Von dort aus speichern und auch dahin von der Festplatte laden.
Mit wenigen Datensätzen ist das machbar und auch schnell genug, deshalb ist mir das erst nicht bewusst geworden.
Erst als ich so eine "Datenbank" im praktischen Einsatz hatte und die Datensätze immer mehr wurden, wurde mir klar, dass das keine so gute Idee war.

Lange Rede, kurzer Sinn! Ich handhabe das mittlerweile anders: alle Daten werden in ein Array geladen, eingegeben, sortiert, dort gesucht und von dort gespeichert.
Das Listview dient im Wesentlichen nur der Anzeige. Auf diese Weise ist das Ganze sehr viel schneller und man kann auch umfangreichere Datensätze verwalten.


Ich wurde nach einem Beispiel-Script gefragt und so habe ich mich mal hingesetzt und solch ein Beispiel-Script geschrieben.
Das Script ist ganz schön umfangreich geworden (ca. 47kB), aber rund die Hälfte davon sind Kommentare.
Dabei habe ich auch an die AutoIt-Anfänger gedacht und jede Zeile kommentiert, mit der Hoffnung, dass das damit verständlich wird.

Das Script ist nicht nur einfach ein Datenbank-Beispiel geworden. Ich habe auch andere Erfahrungen, speziell mit der GUI-Verwaltung, mit einfliessen lassen:
  • Für AutoIt-Anfänger ist wohl der OnEvent-Modus ein Beispiel dafür.
  • Andere haben mit Arrays so ihre Probleme.
  • Ein größenveränderbares Hauptfenster wird hier ebenso benutzt, wie das abspeichern der Größe und Position des Fensters in einer Inidatei.
  • Auch das abwechselnde benutzen des OnEvent- wie auch des MessageLoop-Modus (z.B. für das Infofenster) wird in dem Beispiel gezeigt.
  • Verwenden einer Menüleiste und einer Statuszeile.
  • Doppelkliick-Auswertung auf ein Listview
  • usw.
Screenshot:
   

Bedienung des Programms:
Es gibt sieben Buttons auf dem Hauptfenster:
  • Neue Datenbank erstellen -> Wenn bereits eine Datenbank geladen ist, wird vorher nachgefragt, ob das wirklich passieren soll.
  • Datenbank laden -> Es öffnet sich ein Dialogfenster, indem man eine Datenbankdatei auswählen kann, die dann geladen wird.
  • Datenbank speichern -> Es öffnet sich ein Dialogfenster, indem man eine Datei angeben kann, unter der die Datenbank gespeichert wird (".lvdb" wird hinzugefügt).
  • Neuen Eintrag erstellen -> öffnet ein Fenster, zur Eingabe eines neuen Datensatzes.
  • Eintrag bearbeiten -> öffnet ein Fenster, in dem man den ersten markierten (bzw. den mit Doppelklick ausgewählten) Eintrag bearbeiten kann.
  • Markierte Einträge löschen -> alle markierten Einträge werden, nach Rückfrage, aus der Datenbank gelöscht.
  • Programm-Informationen -> öffnet ein Fenster mit den Programm-Informationen.
Außerdem gibt es die Suche, mit dem Suchbegriff-Eingabefeld und dem Lupen-Button.
Wobei es zwei Arten der Suche gibt:
  • Einmal die "Einzelsuche" (Aufruf ohne gedrückte Shift-Taste), hier wird der Suchbegriff im Listview einzeln angesteuert und der Suchtreffer markiert.
  • Und zum Anderen die "Treffersuche" (Aufruf mit gedrückter Shift-Taste), hier wird ein extra Suche-Listview angezeigt, indem alle Suchtreffer aufgelistet sind (und nur diese).
Zurück zum normalen Daten-Listview kommt man, wenn man die Suche mit leerem Eingabefeld startet.


Im ZIP-Archiv (Anhang) findet ihr das komplette Script, sowie eine Beispiel-Datenbankdatei mit über 16.000 Datensätzen  (die habe ich mit Zufallsdaten erstellt).
Die Datenbankdateien bekommen von dem Programm die Endung ".lvdb". Es handelt sich aber um reine Textdateien. Man kann sie also auch mit einem Editor öffnen.

Lizenz:
Freeware! Das heißt, ich stelle euch das Script zur freien Verfügung. Ihr dürft es verwenden und verändern, wie ihr wollt. Auch das Infofenster dürft ihr beliebig anpassen.
Ein Hinweis auf mich als Autor der Vorlage wäre zwar schön, ist aber keine Bedingung.

Update 31.05.2017 Version3.1:
  • Fehler beim schliessen der Gruppe behoben.
  • Beim aendern der Spaltenbreite des Listview wurde die neue Spaltenbreite erst beim beenden des Programms gespeichert.
  • Beim beenden des Programms wurde für die Nachfrage noch eine MsgBox benutzt. Ich habe nun die Funktion "_ConfirmDelete" in "_Confirm" umbenannt und verwende sie für beide Nachfragen.
  • Einige Kommentare hizugefügt/korrigiert.
Update 01.06.2017 Version3.2:
  • Beim Listview $LVS_EX_DOUBLEBUFFER hinzugefügt. Damit reduziert sich das flackern beim Resizing.
  • Bei dem Eingabefenster ist das erste Element nun ein Date-Control, so braucht man das eingegebene Datum nicht auf Gültigkeit überprüfen und es erleichert die Eingabe.
  • Das zweite und dritte Input-Control habe ich mit $ES_NUMBER erweitert, weil man dort ja nur Zahlen eingeben soll.
  • Beim begrenzen des Fensters auf ein Minimum werden nun die Systemwerte für den Fensterrahmen ausgelesen. Die sind ja bei den Windowsversionen unterschiedlich.
  • Beim resize "_WM_SIZE" wird nun die Aufteilung der Statuszeile mehr zugunsten der linken Seite berücksichtigt.
  • Die Funktion "_Confirm" wird nun auch beim neu erstellen der Datenbank benutzt.