Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TTable Objekte editieren ohne Änderung auf Platte (https://www.delphipraxis.net/45734-ttable-objekte-editieren-ohne-aenderung-auf-platte.html)

Majortomster 11. Mai 2005 15:56

Datenbank: Paradox • Zugriff über: ?

TTable Objekte editieren ohne Änderung auf Platte
 
Hallo zusammen,

ich stehe vor einem Problem, das vielleicht denkbar einfach zu lösen ist... aber ich komme nicht drauf.
Es geht um ein bereits fertiges Programm, das per SQL-Statements (SELECT) in TQuery Objekten, bestimmte Daten aus einer Datenbank ausliest, miteinander vergleicht, usw.
Da die zugrundeliegende Datenbank nun geändert wird, müssen auch einige Änderungen am Programm vorgenommen werden. Das bedeutet unter anderem, dass Abfragen per SQL nicht mehr funktionieren. So müssen alle Abfragen ohne SQL über TTable vorgenommen werden, um die vorherigen Statements so zu "umschreiben".
Das ist zwar ein Heidenaufwand, aber machbar - denke ich...
Jetzt kommt aber das Problem: Ich möchte gern in einem TTable Objekt (das eine Tabelle dieser DB repräsentiert) "herumpfuschen" können (Datensätze löschen, ändern, etc.), OHNE DASS diese Änderungen physikalisch auf der Platte geschrieben werden. Die Tabelle auf der Platte soll danach genauso aussehen wie zuvor.
Ich möchte also mit einer Art Kopie des TTable Objekts im Speicher arbeiten - das geht aber nicht, da diese Objekte immer auf ihr Pendant auf der Platte "zeigen" und alle Änderungen dort vermerken.
Hat irgendjemand eine Idee wie ich das lösen könnte?
Mich würde die Möglichkeit schon zufrieden stellen, diese Tabelle in ein anderes Objekt zu kopieren - was aber genauso sinnvoll zu behandeln sein sollte wie eine Tabelle (Feste Anzahl Spalten, Variable Anzahl Zeilen, Spalten/Zeilen löschbar usw...).
Würd mich freuen wenn jemand weiterhelfen könnte.

Tomster

jensw_2000 11. Mai 2005 21:20

Re: TTable Objekte editieren ohne Änderung auf Platte
 
Hallo und herzlich willkommen in der DP :dancer2:

Nimm einen Memory Dataset ( z.B. rxMemData aus den RX-Tools oder jvMemoryData aus der Jedi VCL)
Das sind TDataset Nachfahren die eine Tabelle im Arbeitsspeicher verwalten.
Da kannst du ändern was du willst.

Die beiden o.a. in-Memory-Tables unterstützen die Methoden CopyFromDataset(TDataset) und CopyStructure(TDataset) so das du deine physikalische TTable problemlos in den Arbeitsspeicher clonen kannst ...

Schöne Grüße,
Jens
:hi:

Majortomster 12. Mai 2005 08:51

Re: TTable Objekte editieren ohne Änderung auf Platte
 
Zunächst erstmal vielen Dank für die Antwort.
An sich ist das von dir erwähnte ja genau das was ich suche. Aber leider würde ich es gern vermeiden, auf externe Bibliotheken zugreifen zu müssen :/
Also sehe ich das richtig, dass es in den Standard Bibliotheken keine solche Klasse gibt? Das ist mir unbegreiflich-das ist doch ein echter Mangel. Oder stand noch nie jemand vor dem gleichen Problem wie ich? (Kann ich mir gar nicht vorstellen)
Gäbe es evtl. Möglichkeiten das Problem mit vorhandenen Mitteln anzugehen?

Gruß, T

Bernhard Geyer 12. Mai 2005 08:57

Re: TTable Objekte editieren ohne Änderung auf Platte
 
Zitat:

Zitat von Majortomster
Zunächst erstmal vielen Dank für die Antwort.
An sich ist das von dir erwähnte ja genau das was ich suche. Aber leider würde ich es gern vermeiden, auf externe Bibliotheken zugreifen zu müssen :/
Also sehe ich das richtig, dass es in den Standard Bibliotheken keine solche Klasse gibt? Das ist mir unbegreiflich-das ist doch ein echter Mangel. Oder stand noch nie jemand vor dem gleichen Problem wie ich? (Kann ich mir gar nicht vorstellen)
Gäbe es evtl. Möglichkeiten das Problem mit vorhandenen Mitteln anzugehen?

Du könntest ADO nehmen und dort eine disconnected Dataset aufbauen. Willst Du die Daten von einer realen Datenbank füllen lassen, so könntest Du den DataShape-Provider verwenden. Beispiele zu der Verwendung findest du im Entwickler Forum wenn Du nach MSDataShape suchst.
Dat das TTable nicht unterstützt liegt daran das du hier die BDE verwendest und diese schon vom Kern her 10-15 Jahre alt ist und eigentlich nicht mehr verwendet werden soll (außer Altprojektpflege) und damals solche Möglichkeiten nicht vorgesehen waren.
Wenn du auf .NET umsteigen willst/kannst, so ist der disconnected Fall der Standard. Hier hast du sogar ein komplettes DBMS als In-Memory-System zur verfügung.

Majortomster 12. Mai 2005 12:39

Re: TTable Objekte editieren ohne Änderung auf Platte
 
ADO kommt leider auch nicht in Frage :/

Habe nochmal ein bisschen rumgesucht und bin dabei auf die Klasse "TClientDataset" gestoßen. Könnte das vielleicht genau das sein, was ich suche. Die Beschreibung in der Delphi-Hilfe hört sich schon mal ganz nett an. Hat vll. schon jemand Erfahrungen mit dieser Klasse gesammelt?

Gruß, T

Majortomster 12. Mai 2005 13:36

Re: TTable Objekte editieren ohne Änderung auf Platte
 
Falls das geht stellt sich nun nur noch die Frage, wie ich eine TTable in das TClientDataSet rein kriege... :/
(Hab leider nicht so die Ahnung von Datenbanken in Delphi aber hoffe trotzdem, dass mir jemand diese Noob-Fragen beantworten kann.

T


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 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