Entwickler-Ecke

Datenbanken - clientdataset: filter über berechnete daten?


GameG - Di 29.09.09 00:10
Titel: clientdataset: filter über berechnete daten?
einen wunderschönen guten tag!

ich hab eine datenbank mit einem clientdataset-objekt.

ich habe 2 spalten: A und B

aus A und B berechne ich (OnCalcFields) einen wert und lasse den in einer dritten spalte C (fkInternalCalc) anzeigen (geht auch).
nun will ich einen filter über C legen. aber der filter gibt mit immer keine datensätze zurück - egal welche werte da in C drin stehen. es werden lediglich alle datensätze angezeigt, wenn ich "C = 0" als filterstring angebe.

kann mir jemand helfen?
vielen dank


zuma - Di 29.09.09 09:10

ist denn ein Wert 0 in der spalte drin ? und nicht 0,00000000000001 oder sowas ?
runde mal den wert, den du in die spalte einträgst, auf z.b 5 nachkommastellen, oder trag mal testweise einfach ne 'glatte' 0 ein


GameG - Di 29.09.09 14:09

in C sind einfache int-werte drin (1, 2, 3, 4)

wenn ich über FieldByName('C') den jeweiligen wert abfrage steht der auch da drin. aber wenn ich den in OnFilterRecord den wert auslese, ist der wert plötzlich wieder 0. 0ô?

filter: C = 0 liefert alle datensätze
filter: C = 1 liefert keine datensätze

:(


Critter - Di 29.09.09 15:16

Hallo,

wenn ich mich recht entsinne (lang, lang ist es her) hatte ich mal ein ähnliches Problem mit einer anderen DB Komponente. Dort war es nicht möglich auf Calculated Werte zu Filtern, es war aber sehr wohl möglich sie im OnFliterRecord Ereignis ab zu fragen und dort die Filterung über den Accept Parameter zu beeinflussen.

Eventuell hilft dir ja dieser Ansatz.

critter


zuma - Di 29.09.09 16:14

versuch doch mal in onFilterRecord


Delphi-Quelltext
1:
accept := (FieldByName('c') > 0)                    


zu setzen

Moderiert von user profile iconKlabautermann: Dephi-Tags gesetzt.


GameG - Do 01.10.09 17:29

wenn ich den wert C des datensatzes über einen button auslese, erhalte ich das richtige ergebnis.
wenn ich den wert C des datensatzes in OnFilterRecord auslese, erhalte ich immer nur ''.

auch das setzen im OnFilterRecord geht nicht :(

es scheint so, das der compiler das ergebnis da irgendwie noch nicht berechnet hat oder nicht zugreifen kann.

naja ich hab jetzt das feld zum datum gemacht und berechne es seperat und tage das ein. ist zwar sehr sehr unschön, aber was besseres fällt mir gerade nicht ein :(

danke