Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten aus Datenbank in Speicher halten?! (https://www.delphipraxis.net/165497-daten-aus-datenbank-speicher-halten.html)

hans ditter 2. Jan 2012 23:40

Datenbank: SQLite • Version: 3 • Zugriff über: Delphikomponenten

Daten aus Datenbank in Speicher halten?!
 
Hallo an alle!

Hoffentlich seid ihr gut durch die Feiertage gekommen! ;)

Ich habe mich in den Ferien mit Datenbanken beschäftigt und vor allem damit, wie ich die in eine Delphi-Anwendung einbinde.
Nun hab ich ein Projekt erstellt, dass meine DVDs verwaltet. Hierzu habe ich unter anderem die Tabelle (Tbl) 'Movies' erstellt, die die Informationen zu Titel, Regisseur, Schauspieler, Genre etc. aufnimmt.

Nun hab ich in der Anwendung eine Eingabemaske entworfen, die aus Edits und Memos besteht, die also jeweils nur einen Datensatz anzeigt oder einen neuen aufnehmen kann.

Nun hab ich mich gefragt, wie ich die Daten nun am Besten verarbeite, z.B. beim Navigieren. Im Moment ist es so, dass ich für einen Datensatz zurück die komplette Tabelle ('SELECT * FROM movies;') aus der DB hole und den n-ten Datensatz heraushole (n hab ich mir in einer Variable gemerkt). Danach wird die Tabelle wieder geschlossen.

Diese Art halte ich aus 2 Gründen für ungünstig: 1. es ist extrem umständlich und 2. (wichtiger) wird die Datenbank laufende Meter wieder neu geöffnet, eine neue Abfrage Tabelle erzeugt und dann wieder geschlossen.

Also dachte ich mir, kannste ja auch die ganze Tabelle in ein Programminternes Array speichern und somit immer zur Verfügung haben. Doch da hab ich mir gedacht, dass das ja enorm viel an Ressourcen verbraucht, vor allem wenn es an die tausende Datensätze geht, und es bei Multi-User-Zugriffen auch ein Problem der Aktualität geben könnte.

Nicht alle Dinge (z.B. Multi-User) treffen auf mein Projekt zu, sind ja aber wann anders vielleicht interessant. Also meine allgemeine Frage: Wie holt man sich Daten aus einer Datenbank um sie anzuzeigen, in ihnen zu navigieren und sie zu verändern, ohne z.B. ZEOS zu verwenden.

Die Frage ist halt nich auf mein Projekt speziell bezogen, sondern mehr generell, denn vlt kommt in Zukunft ja mal ein Projekt mit Multi-User und tausenden Datensätzen... ;) man kann ja nie wissen!

LG; hans ditter

RWarnecke 3. Jan 2012 05:38

AW: Daten aus Datenbank in Speicher halten?!
 
Hallo,

Ich schreibe mir dazu Klassen und eine TObjectList. Beim ersten Mal aufrufen, werden alle Datensätze in die TObjectList geladen. Nachher im Programm, navigiere ich nur durch die Objektlist und reagiere auf Veränderungen. Wird eine Veränderung vom Anwender durchgeführt, lade ich nochmal alle Datensätze neu in die ObjectList.

Bummi 3. Jan 2012 06:37

AW: Daten aus Datenbank in Speicher halten?!
 
Das ist doch genau das was Datasets (zumindest Clientseitige) ohnehin tun ...:gruebel:

Furtbichler 3. Jan 2012 07:27

AW: Daten aus Datenbank in Speicher halten?!
 
Für eine Tabelle sollten datensensitive Steuerelemente genau das Richtige sein.

1. Tabellenkomponente auf die Form schmeissen.
2. Mit einer TDatasource-Komponente verknüpfen.
3. TDBGrid auf die Form und mit der TDatasource verknüpfen.
4. Dann noch ein paar TDBEdits und TDBMemos und mit TDatasource verknüpfen.

Starten und staunen, das man so ein Projekt ganz ohne Code hinbekommt.

hans ditter 4. Jan 2012 11:11

AW: Daten aus Datenbank in Speicher halten?!
 
Naja, dass es mit datensensitiven Komponenten geht war mir klar. Es ging mir vor allem um die generelle Umsetzung, wenn man eben keine entsprechenden Komponenten nutzen will.

LG; hans ditter

stahli 4. Jan 2012 11:43

AW: Daten aus Datenbank in Speicher halten?!
 
Hier hatte ich ähnliche Fragen angesprochen: http://www.delphipraxis.net/165090-g...nkprojekt.html
Es ging dann recht munter durcheinander. Es gibt eben unterschiedliche Ansätze, die unterschiedliche Vor- und Nachteile haben und nicht für jedes Projekt gleich bewertet werden können.

Sharky 4. Jan 2012 11:49

AW: Daten aus Datenbank in Speicher halten?!
 
Zitat:

Zitat von hans ditter (Beitrag 1144090)
... Im Moment ist es so, dass ich für einen Datensatz zurück die komplette Tabelle ('SELECT * FROM movies;') aus der DB hole und den n-ten Datensatz heraushole (n hab ich mir in einer Variable gemerkt). Danach wird die Tabelle wieder geschlossen...

Warum holst Du denn die komplette Tabelle wenn Du nur einen bestimmten Datensatz haben möchtest?
Das macht das doch unglaublich langsam. Schliessen musst Du die Verbindung zur Datenbank ja auch nicht.
Beim Programmstart mit der DB verbinden und beim beenden schliessen.
Dazichen immer nur ein SELECT ... das mit Parametern aufgerufen wird.

hans ditter 4. Jan 2012 14:47

AW: Daten aus Datenbank in Speicher halten?!
 
@Sharky: Das war letztlich auch das, was ich problematisch gesehen hab. Die beste Lösung sieht für mich im Moment wie die Antwort von RWarnecke mit Klassen und ObjectList, obwohl mir die Umsetzung noch nicht ganz klar ist...

Was hat die Klasse zu tun? Holt die die Daten aus der DB oder nimmt sie die Daten eines Datensatzes auf oder wie? Und was speicher ich in der ObjectList? Pointer auf die Klasse? Oder irgendwas anderes?

LG; hans ditter

webcss 4. Jan 2012 14:58

AW: Daten aus Datenbank in Speicher halten?!
 
Schau Dir mal z.B. dORM an, dann musst Du das Rad nicht unbedingt neu erfinden.

p80286 4. Jan 2012 17:00

AW: Daten aus Datenbank in Speicher halten?!
 
Lehn Dich doch mal zurück und frag Dich was Du willst.
Wenn Du z.B einen Film suchst, dann fragst Du nach "Doktor Schiwago". Dann interessiert Dich "stirb langsam III" nicht. Es sei denn Du möchtest eine Liste aller Filme (mit Bruce Willis) haben.
Wenn Du diese Anforderungen kennst, - und erst dann!!- solltest Du daran gehen die notwendige Oberfläche zu schreiben.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr.
Seite 1 von 3  1 23      

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