Thema: FreePascal ListView/ListBox in Datenbank

Einzelnen Beitrag anzeigen

BerlinerBaer

Registriert seit: 14. Feb 2017
Ort: Berlin
4 Beiträge
 
FreePascal / Lazarus
 
#1

ListView/ListBox in Datenbank

  Alt 9. Jan 2021, 13:36
Datenbank: SQLite3 • Version: 3.33.0 • Zugriff über: DB Browser
Hallo.


erstmal wünsche ich euch ein frohes und gesundes neues Jahr. Nach langer Pause, versuche ich mich nun wieder an einem Projekt, an dem ich seit einigen Tagen nicht mehr weiter komme. Ich erstelle derzeit ein Haushaltsbuch um meine Finanzen im Überblick zu halten. Dieses werte ich später aus, um zu wissen, wann ich wofür wieviel Geld ausgegeben habe.

Um Resonanzen zu vermeiden, arbeite ich lieder mit zwei Tabellen.

Hier wird gespeichert, wo ich wann etwas gekauft habe.
einkauf_kategorie
ID
markt
datum

Hier wird angegeben, was ich zu welchem Preis gekauft habe.
einkauf
ID
katID
produkt
preis

Ich möchte den Inhalt von Edits einer ListView/ListBox der Tabelle "einkauf" zuordnen. Das klappt problemlos.
Nun stehe ich vor dem Problem, dass ich die ListView/ListBox in die Datenbank speichern möchte, ohne jedes mal INSERT INTO aufrufen zu müssen. Dass ich mehrere Daten gleichzeitig in die Datenbank bekomme, ist möglich:
Code:
ZQuery.SQL.Clear
ZQuery.Params.Clear

// CreateParam für die Kategorie.
ZQuery.Paramas.CreateParam(ftString, 'Markt' ptinput);
ZQuery.Paramas.CreateParam(ftDateTime, 'Datum' ptinput);
// CreateParam die einzelnen Produkte.
ZQuery.Paramas.CreateParam(ftString, 'Produkt' ptinput);
ZQuery.Paramas.CreateParam(ftFloat, 'Preis' ptinput);

// Parameter für die Kategorie mit Variablen befüllen.
ZQuery.ParamByName('Markt').Value:=MarktBezeichnung;
ZQuery.ParamByName('Datum').Value:=KaufDatum;
// Parameter für die einzelnen Produkte mit Variablen befüllen.
ZQuery.ParamByName('Produkt').Value:=KaufProdukt;
ZQuery.ParamByName('Preis').Value:=KaufPreis;

ZQuery.SQL.Text:='INSERT INTO einkauf_kategorie (markt, datum) VALUES (:markt, :datum)';
ZQuery.SQL.Text:='INSERT INTO einkauf (katID, produkt, preis) VALUES ((SELECT last_insert_rowid() FROM einkauf_kategorie), :Produkt, :KaufPreis);'
Damit kann ich nur ein Produkt eintragen, aber nicht die restlichen. Natürlich kann ich dem INSERT INTO auch mehrere Datensätze geben. Allerdings wäre das nicht dynamisch.
Code:
INSERT INTO tbl (col1, col2) VALUES (Wert1a, Wert1b), (Wert2a, Wert2b), (Wert3a, Wert3b);
Nun zu meinen Überlegungen, wie ich das alles am besten bewerkstellige. Dabei ging mir durch den Kopf mit Arrays zu arbeiten. Da die Anzahl der Produkte, die ich jedes mal kaufe, unterschiedlich ist, würde ich auf dynamische Arrays zurückgreifen. Bei denen kann ich ja den Endwert mittels Anzahl der Einträge in der ListView/ListBox ermitteln. Auch das funktioniert. Nur weiß ich leider nicht, wie ich die Arrays "entpackt" in die Datenbank bekomme.

Hat jemand Lösungsvorschläge?


Liebe Grüße
BerlinerBaer
  Mit Zitat antworten Zitat