Autor Beitrag
theCylus
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 03.05.09 21:07 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: So 03.05.09 21:26 
Hallo theCylus,

TDBGrid? Besser myDBGrid

Bis bald Chemiker
theCylus Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 03.05.09 21:30 
Was ist denn der Vorteil von myDBGrid? Ich bin bei meinem Programm nach der Anleitung von www.delphi-treff.de/...n-mit-mybase/page/1/ vorgegangen. Das Problem betrifft ja nicht das Grid sondern den TClientDataset.
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: So 03.05.09 22:32 
Hallo theCylus,

alles klar.

Versuchst nur mit:

ausblenden Delphi-Quelltext
1:
2:
TClientDataSet1.Filtered:= TRUE;
 TClientDataSet1.Filter := 'Wagen = 1';



Bis bald Chemiker
theCylus Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: So 03.05.09 22:54 
Vielen Dank! Funktioniert genau so wie gewünscht!
Chemiker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 194
Erhaltene Danke: 14

XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
BeitragVerfasst: So 03.05.09 22:57 
Hallo theCylus,

die Namen sind immer noch sehr unglücklich gewählt.

Besser:

ausblenden Delphi-Quelltext
1:
2:
BestellungClientDataSet: TClientDataSet;
ArtikelClientDataSet: TClientDataSet;

Bis bald Chemiker
theCylus Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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.