![]() |
Datenbank: Paradox • Zugriff über: ?
Seltsames Verhalten in TClientDataSet Objekt
Hallo,
kurze Frage (und hoffentlich ebenso einfache Antwort ;): Situation: Ich benutze ein TClientDataSet Objekt, fülle es mit Werten aus einer Paradox Tabelle, filtere dieses Objekt dann mit SetRange(..) und speichere es mit der Methode SaveToFile(...) als XML Datei. Frage: Warum sind in der XML Datei TROTZ Filterns ALLE Datensätze der Tabelle enthalten? (Ein Test mit recordCount zeigt jedoch die richtige, reduzierte Menge an Datensätzen an rätselhaft). Hoffe jemand hat ne Erklärung dafür. T |
Re: Seltsames Verhalten in TClientDataSet Objekt
Ich würde einfach sagen: SaveToFile ignoriert einfach die Filter und SetRange-Angaben und speichert immer alle zugrundeliegenden Daten.
Du könntest Versuchen die gefilterten Daten in ein weiteres TClientDataset zu kopieren und dieses dann zu speichern. |
Re: Seltsames Verhalten in TClientDataSet Objekt
Das wird wohl daher kommen, dass das Dataset alle Records enthält und mit "Filter" nur die Anzeige eingeschränkt wird. Ich vermute mal, Du holst die Daten per "SELECT * ...". Die Methode SaveToFile speichert dann auch richtig alle Records ab.
Umgehen kannst Du das, indem Du die Ergebnismenge des Datasets von Anfang an einschränkst. Also indem die Quelle kein Table oder eine "SELECT * FROM ..." -Anweisung, sondern bereits die gefilterte Datenmenge ist: "SELECT * FROM blabla WHERE ...." Gruß Igotcha |
Re: Seltsames Verhalten in TClientDataSet Objekt
Ja die Erklärung klingt sinnvoll (auch wenn mir dann der Sinn eines Filters entgeht wenn man das Ergebnis nicht Speichern kann).
Zu den Lösungen: 1. Die gefilterte Menge in ein zweites TClientDataSet kopieren und dann speichern - das würde bestimmt klappen, aber das ist doch so umständlich (vom Performanceverlust ganz zu schweigen), das KANN doch nicht Sinn der Sache sein.(?) 2. Bereits mit der gefilterten Datenmenge füllen - ist in meinem Fall nicht möglich, da ich das TClientDataSet ja GERADE aus dem Grund mit einer Datenbanktabelle fülle, um danach darin "herumzupfuschen", ohne dass das "Original" auf Platte beeinflusst wird. Hat jemand eine Idee, wie ich das am elegantesten anstellen könnte? Oder komme ich um Lösung 1 nicht herum? Gruß, T |
Re: Seltsames Verhalten in TClientDataSet Objekt
Zitat:
Offenbar "pfuschst" Du doch mit Filtern rum, oder? Wo ist das Problem, statt der Filter-Eigenschaft der Tabelle eine entsprechende SQL-Abfrage einzusetzen. Also statt Table.Filter:=wasweissich
Delphi-Quellcode:
Du nimmst dann eben anstatt einer TTable-Komponente eine TQuery-Komponente als Datenquelle.
SELECT * FROM tabelle WHERE spalte=wasweissich
Gruß Igotcha |
Re: Seltsames Verhalten in TClientDataSet Objekt
Zitat:
T |
Re: Seltsames Verhalten in TClientDataSet Objekt
Hallo Majortomster,
Zitat:
|
Re: Seltsames Verhalten in TClientDataSet Objekt
Es ist eine proprietäre DB, die sich noch in der Entwicklung befindet - nichtmal ihr Name steht fest.
Fest steht nur, dass man ausschließlich über TTable zugreifen kann - kein SQL. Gruß, T |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz