Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ListBox in DB speichern (https://www.delphipraxis.net/4586-listbox-db-speichern.html)

Hansa 5. Mai 2003 14:06


ListBox in DB speichern
 
wie kann ich den Inhalt einer Listbox in einer IB-Datenbank abspeichern? Eventuell käme auch ein StringGrid in Frage. Angenommen, ich fülle die Box oder das Grid mit Werten, so daß die DB vorerst nichts davon mitbekommt. Erst am Ende soll alles auf einen Schlag in die DB.

Jens Schumann 5. Mai 2003 17:36

Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Hansa,
das ist nicht weiter schlimm.
Den Inhalt einer ListBox kann man prima in einen Blobfield speichern.
Dafür habe ich Dir ein Beispiel angehängt.
Die Beispiel Tabelle lb.gdb muss im Verzeichnis D:\Delphi5\Test\Tlistbox in IB Database liegen und der Interbase-Server muss laufen, wenn Du die EXE testen möchtest. Weiterhin enthält die Tabelle LBTABLE ein Feld mit dem Namen ID. Dies ist der Primary-Key der Tabelle und muss eindeutige Werte enthalten. Den Wert für ID hole ich über eine StoredProc und einen Generator. Da ich es erst bei 28ten Versuch geschafft habe einen Datensatz in die Tabelle zu schieben kann man die Daten erst ab ID=28 selecten (wird im Spinedit eingestellt). Da ich gerade auf meiner Terrasse am Laptop sitze und auf dem Ding noch die IBX-Version war, die mit D5 ausgeliefert wird musste ich erst auf die Version 5.03 für D5 SP1 updaten. Erst mit diesem Update läuft das Programm.

IBX 5.03

{Ich gehe davon aus, dass kein DBGrid und keine TDatasource verwenden möchtest}
Wenn Du ein StringGrid in eine Datenbank schieben möchtest, dann lege Dir in der Datenbank eine Tabelle an, die genau soviele Felder hat wie das StringGrid. Plus einer Spalte für einen Primary-Key. Der Primary-Key sollte so etwas wie ein AutoInc-Feld sein. Über den Primary-Key kannst Du dann den Datensatz eindeutig identifizieren. Wie ich AutoInc-Felder erzeuge habe ich im TListBox-Beispiel gezeigt.
Jetzt kannst Du in einer TIBDataset ein Insert-SQL zusammenbastelen (mit Parametern) und Dein StringGrid zeilenweise in die Datenbank posten.
Wenn Du allerdings in Deinem StringGrid Datensätze hast, die schon in der Datenbank sind, dann wird es komplizierter.
Dann musst Du die Fälle Insert, Update und Delete unterscheiden.
Für diesen Fall empfehle ich Dir das Du Dir eine Objektstruktur anlegst, die die eigentlichen Daten enthält und das Du das StringGrid nur zur Visualisierung der Daten verwendest. Mit zwei TList Objekten kann man eine solche Objektstruktur aufbauen.
Leider ist die Sache so komplex, dass ich noch nicht weiss wie ich es hier ins Forum posten soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz