![]() |
Datenbank: SQLServer • Version: 2000 • Zugriff über: dbGo
TADODataSet.Filter Syntax Fehler
Hallo,
habe ein Problem mit der TADODataSet Komponente im speziellen mit dem Syntax des Filters: Dieses Phänomen ist leicht zu reproduzieren: Man nehme: 1. eine beliebige Tabelle mit diversen Integer - Spalten hier X,Y und Z 2. formuliere einen Ausdruck wie
Code:
2.1 alternativ
(X > 10) AND (Y > 10 OR Z > 100)
Code:
Es kommt der Fehler: Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereiches oder sind miteinander Unvereinbar!
(X > 10) AND ((Y > 10) OR (Z > 100))
3. Verändert man den Ausdruck nach
Code:
ist das OK, jedoch stimmt dann das Ergebnis nicht mehr.
(X > 10) AND (Y > 10) OR (Z > 100)
4. Das Problem taucht auf bei BCB5, RAD Studio 2007 C++ Builder und Delphi 5. Das Workaround, am SQL-Ausdruck den WHERE-Bereich zu erweitern ist nicht so toll, da im Fall wo es produktiv auftritt die Performance dann in die Knie geht. So werden die Daten ein mal geladen und dann lokal der Filter gesetzt... Irgend eine Idee? |
AW: TADODataSet.Filter Syntax Fehler
Wie wäre es, wenn du in deinem DataSet ein neues Feld (boolean) einfügst und über das Calc-Ereignis deine Formel hinterlegst und dann im Filter nur dieses eine neue Feld verwendest?
|
AW: TADODataSet.Filter Syntax Fehler
Die Abfrage im Filter darf eine gewisse Komplexität nicht überschreiten ... das packt der halt nicht
|
AW: TADODataSet.Filter Syntax Fehler
Ich arbeite immer mit OnFilterrecord bei TADODataset
Delphi-Quellcode:
procedure TForm1.TADODataset1FilterRecord(DataSet: TDataSet;
var Accept: Boolean); begin accept := ((TADODatasetx.asinteger > 10)and ((TADODatasety.asinteger > 10) or (TADODatasetz.asinteger > 100))); end; |
AW: TADODataSet.Filter Syntax Fehler
Schöner ist allerdings...
Delphi-Quellcode:
procedure TForm.TADODatasetFilterRecord(DataSet: TDataSet;
var Accept: Boolean); begin accept := ( (Dataset.FieldByName('x').AsInteger > 10) and ( (Dataset.FieldByName('y').AsInteger > 10) or (Dataset.FieldByName('z').AsInteger > 100))); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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