AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Seltsames Verhalten in TClientDataSet Objekt
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsames Verhalten in TClientDataSet Objekt

Ein Thema von Majortomster · begonnen am 17. Mai 2005 · letzter Beitrag vom 17. Mai 2005
Antwort Antwort
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#1

Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 10:45
Datenbank: Paradox • Zugriff über: ?
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 11:13
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 11:16
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
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#4

Re: Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 11:34
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
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 12:26
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

SELECT * FROM tabelle WHERE spalte=wasweissich Du nimmst dann eben anstatt einer TTable-Komponente eine TQuery-Komponente als Datenquelle.

Gruß Igotcha
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#6

Re: Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 12:37
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
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#7

Re: Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 13:08
Hallo Majortomster,

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?
Gruß

Albi
  Mit Zitat antworten Zitat
Majortomster

Registriert seit: 11. Mai 2005
27 Beiträge
 
#8

Re: Seltsames Verhalten in TClientDataSet Objekt

  Alt 17. Mai 2005, 13:13
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
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