Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Seltsames Verhalten in TClientDataSet Objekt (https://www.delphipraxis.net/46040-seltsames-verhalten-tclientdataset-objekt.html)

Majortomster 17. Mai 2005 10:45

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

Bernhard Geyer 17. Mai 2005 11:13

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.

Igotcha 17. Mai 2005 11:16

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

Majortomster 17. Mai 2005 11:34

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

Igotcha 17. Mai 2005 12:26

Re: Seltsames Verhalten in TClientDataSet Objekt
 
Zitat:

Zitat von Majortomster
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.

Was meinst Du mit "herumpfuschen"?

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:
SELECT * FROM tabelle WHERE spalte=wasweissich
Du nimmst dann eben anstatt einer TTable-Komponente eine TQuery-Komponente als Datenquelle.

Gruß Igotcha

Majortomster 17. Mai 2005 12:37

Re: Seltsames Verhalten in TClientDataSet Objekt
 
Zitat:

Du nimmst dann eben anstatt einer TTable-Komponente eine TQuery-Komponente als Datenquelle.
Genau das geht leider nicht - ich MUSS TTable verwenden, da die zugrunde liegende Datenbank kein SQL unterstützt. (ich meine jetzt nicht die oben angegebene Paradox - die benutze ich nur zum Testen)

T

Albi 17. Mai 2005 13:08

Re: Seltsames Verhalten in TClientDataSet Objekt
 
Hallo Majortomster,

Zitat:

Zitat von Majortomster
Genau das geht leider nicht - ich MUSS TTable verwenden, da die zugrunde liegende Datenbank kein SQL unterstützt. (ich meine jetzt nicht die oben angegebene Paradox - die benutze ich nur zum Testen)

Dann sage uns doch um was für eine Datenbank es sich handelt und wir können das Problem vielleicht leider lösen. Oder ist die DB geheim? :-D

Majortomster 17. Mai 2005 13:13

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 12:11 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