Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Filter auf CalculatedField ? (https://www.delphipraxis.net/152817-filter-auf-calculatedfield.html)

DataCool 8. Jul 2010 09:14

Datenbank: ADS • Version: 9.1 • Zugriff über: ADS

Filter auf CalculatedField ?
 
Hi Leute,

habe hier gerade beim einem historisch gewachsenen Projekt das Problem,
das ich den Filter eines Table erweitern muss.
Soweit ja kein Problem allerdings befindet sich das Feld für den Filter in einem anderen Table.
Table gegen Query tauschen, geht leider nicht, weil historisch gewachsen ... = Riesenbaustelle
Mein Ansatz war es den Table um ein Calculated Field zu erweitern und im OnCalcFields den Wert aus dem anderen geöffneten Table zu Lesen/Zuzuweisen.
Dies ist leider nicht möglich und führt zu folgender Exception :
"Exception-Klasse EADSDatabaseError mit Meldung 'ApDS_Main: Error 3111: Unknown identifier found in a record filter expression.'"

Dann habe ich mir gedacht ich könnte das ganze eventuell über "OnFilterRecord" lösen,
der Ansatz ist auch nicht schlecht und würde auch funktionieren,
allerdings tritt erst das Event "OnFilterRecord" ein und danach erst "OnCalcFields", wo erst der richtige Wert ermittelt wird.

Hat jemand eine Idee/Denkanstoss diese Problematik zu Lösen,

Danke im vorraus,

Greetz Data

mkinzler 8. Jul 2010 09:18

AW: Filter auf CalculatedField ?
 
Wäre es möglich, den Filter in die Berechnung mit einbeziehen?

DataCool 8. Jul 2010 09:22

AW: Filter auf CalculatedField ?
 
@mkinzler:

Wie meinst Du das genau
Zitat:

den Filter in die Berechnung mit einbeziehen?
Greetz Data

mkinzler 8. Jul 2010 09:29

AW: Filter auf CalculatedField ?
 
Bei genauerer Überlegung wird das wohl nicht gehen.
Aus meiner Sicht wäre dann ein Query die einzige Alternative

DataCool 8. Jul 2010 09:49

AW: Filter auf CalculatedField ?
 
@mkinzler:

^^ Das ^^ habe ich befürchtet, auch über ein Lookup-Field kommt ich nicht an den entsprechenden Wert,
weil der Primary Key, über den gesucht werden müßte sich aus 2 String-Feldern zusammen setzt :wall:

Bleiben mir jetzt noch 2 Möglichkeiten :
- Große Baustelle aufmachen und Table gegen Query ersetzen
- Oder das "fehlende" Feld in Table "A" redudant mitführen, erwähne diese Möglichkeit nur weil das auch schon die Lösung bei diversen anderen Feldern ist,
wie schon gesagt historisch ewachsen ... und wenn man dann den Source "vorgesetzt bekommt" kann man aus Zeitgründen nicht immer einfach alles neu machen.

Greetz Data

ChrisE 8. Jul 2010 11:45

AW: Filter auf CalculatedField ?
 
Hallo DataCool,

ich nehme an, dass du dir anstatt der Datenbank-Tabelle keinen View bauen kannst auf DB-Ebene der das für dich erledigt? Diesen könntest du dann wieder nach belieben Filtern.

Greez, Chris

DataCool 8. Jul 2010 15:13

AW: Filter auf CalculatedField ?
 
@ChrisE:
Die Idee mit dem View hatte ich zwischenzeitlich auch schon, leider bereitet dieser Ansatz auch Probleme mit bestehenden Strukturen.


Glücklicherweise habe ich ich Lösung für mein Problem gefunden!
- Definition eines CalculatedFields in Table A, welches im OnCalcFields den entsprechenden Wert aus Table B ermittelt
- Implementierung des Events OnFilterRecord, bis jetzt ist das Problem noch das OnFilterRecord vor OnCalcFields eintritt ...
- setzen der Option:

Delphi-Quellcode:
TableA.AdsTableOptions.AdsCalcFieldsBeforeFilter := true;


Danke an alle,

Greetz Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 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