Entwickler-Ecke
Datenbanken - Filtern von TClientDataset zur Laufzeit geht nicht
theCylus - So 03.05.09 21:07
Titel: Filtern von TClientDataset zur Laufzeit geht nicht
Hallo!
Ich habe mehrere TDBGrids, die Daten des TClientDataset anzeigen (sollen). Jeder Datensatz enthält unter anderem das Feld "Wagen". Zur Laufzeit wird dem Feld "Wagen" jedes Datensatzes ein variabler Integerwert zugewiesen. Nun möchte ich z.b. In TDBGrid1 alle Datensätze sehen, bei denen "Wagen" den Wert 1 hat. Setze ich einen Filter in der GUI, funktioniert das wunderbar. Setze ich den Wert TClientDataset1.DataSource.Dataset.Filter allerdings zur Laufzeit, bekomme ich eine Exception ... "Zugriffsverletzung beim Lesen".
Das ganze ist folgendermaßen aufgebaut: Form1 -> PageControl -> TabSheets, TDBGrid
Es soll beim Wechsel des TabSheet, das jeweils entsprechende TDBGrid "gefiltert" werden. Wagen 1, Wagen 2 usw. Das Ganze löse ich über OnEnter. Weiß jemand, worauf ich beim Filter setzen zur Laufzeit achten muss? Bzw wie die exakte Syntax ist, wenn das TDBGrid nur die Datensätze anzeigt, die bei "Wagen" den Wert 1 haben?
Vielen Dank schonmal im Voraus!
Chemiker - So 03.05.09 21:26
Hallo theCylus,
TDBGrid? Besser myDBGrid
Bis bald Chemiker
Chemiker - So 03.05.09 22:00
Hallo theCylus,
das war jetzt nur ein Beispiel. Wenn Du das TDBGrid auf das Form ablegst wird von Delphi automatisch der Name (DBGrid1) vergeben.
In Deinem Beispiel hast Du den Namen auf TDBGrid geändert, das kann zu Problemen führen.
Bis bald Chemiker
theCylus - So 03.05.09 22:05
Sorry, mein Fehler: Ich habe das TDBGrid nur der Verständlichkeit halber hier so genannt. Da gibt es also keine Probleme.
[edit]
TClientDataset1.DataSource.DataSet.Filtered := False; <- Erzeugt eine dieselbe Exception (Fehler beim Lesen von Adresse...)
TClientDataset1.DataSource.DataSet.Filter := 'Wagen = 1'; <- Erzeugt eine dieselbe Exception (Fehler beim Lesen von Adresse...)
Allerdings eben nur bei Verwendung zur Laufzeit. Im Objektinspektor lassen sich die Werte problemlos zuweisen und arbeiten auch korrekt.
[/edit]
Chemiker - So 03.05.09 22:32
Hallo theCylus,
alles klar.
Versuchst nur mit:
Delphi-Quelltext
1: 2:
| TClientDataSet1.Filtered:= TRUE; TClientDataSet1.Filter := 'Wagen = 1'; |
Bis bald Chemiker
theCylus - So 03.05.09 22:54
Vielen Dank! Funktioniert genau so wie gewünscht!
Chemiker - So 03.05.09 22:57
Hallo theCylus,
die Namen sind immer noch sehr unglücklich gewählt.
Besser:
Delphi-Quelltext
1: 2:
| BestellungClientDataSet: TClientDataSet; ArtikelClientDataSet: TClientDataSet; |
Bis bald Chemiker
theCylus - So 03.05.09 23:06
Wie gesagt, ich habe die Namen nur hier so formuliert, der besseren Verständlichkeit halber. Aber jetzt läuft ja alles so, wie es soll.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!