2016-03-28 4 views
3

Ich gehe langsam von ClientDataSet zu FireDAC FDQuery Komponenten in meinen Projekten (Delphi 10 Seattle).Wie bekomme ich FireDAC Record Count, wenn SetRange aktiv ist

Ein Trick, den ich oft mit CDS verwende, ist die Anzahl der Datensätze in einem Bereich zu überprüfen.

Das heißt:

CDS.SetRange([Value1][Value2]); 
k := CDS.RecordCount; 
case k of 
    1 : DoSingleThing; 
    2 : DoDoubleThing; 
else 
    BailOnWrongCount; 
end; 

Weil ich den ganzen Satz von Daten zur gleichen Zeit benötigen, verwende ich FetchOptions.Mode: = fmAll, wenn zuerst die Abfrage öffnen.

Doing FDQuery.SetRange([Value1][Value2]); ruft dann Aufruf FDQuery.RecordCount immer die Datensatzanzahl des gesamten Datasets (nach FmAll) - nicht den aktuellen Bereich.

Ich muss manuell die Bereichszählung Datensätze durchlaufen.

Gibt es einen einfacheren Weg, die Anzahl der Datensätze im aktuellen Bereich zu erhalten?

Antwort

4
+0

Wieder einmal das blendend offensichtlich. Danke dafür - nachdem ich FetchOptions.Mode richtig eingestellt habe, habe ich RecordCountMode komplett vermisst (oder vielmehr, habe es vor einiger Zeit gelesen und komplett vergessen). Langsam voran und sehr dankbar für Ihre Unterstützung. – edbored

+0

- um sicher zu sein - gibt cmVisible ein anderes Ergebnis zurück, wenn es mit einem DBGrid verbunden ist? Ich glaube, das hat mich ursprünglich verwirrt: Es sind nicht die derzeit sichtbaren Datensätze in einem Raster, sondern tatsächlich die Untermenge aller möglichen Datensätze, auf die derzeit zugegriffen werden kann - ob gefiltert oder begrenzt durch die Entfernung - ist das korrekt? – edbored

+0

cmVisible bedeutet die Anzahl der Datensätze, auf die über die TDataSet-Navigations-API (First, Next, Eof usw.) mit allen aktuellen Filter-/Begrenzungseinstellungen zugegriffen werden kann. cmVisible bezieht sich nicht auf GUI oder TDBGrid. Kann besser sein Name wird cmAccessible, aber dieser Name kann zu anderen Zweifeln führen ... –

Verwandte Themen