Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Recordcount wenn filtered=true ?!? (https://www.delphipraxis.net/10311-recordcount-wenn-filtered%3Dtrue.html)

st2000 15. Okt 2003 19:30


Recordcount wenn filtered=true ?!?
 
Hallo, weiss jemand, wie man die Anzahl der resultierenden Datensätze zählt, NACHDEM ein Dataset gefiltert wurde ?
Habe eine Tabelle (Access 2000), welche gefiltert wird, so dass nur ein Datensatz stehen bleibt. Vorhanden sind aber (wenn nicht gefiltert) 23 Datensätze.

Mein TDBGrid zeigt mir auch nur den einen, korrekt gefundenen Datensatz an.

Mache ich aber

Delphi-Quellcode:
tbl1.filter:='feld1=51';
tbl1.filtered:=true;
tbl1.open;
x:=tbl1.recordcount
dann erhalte ich x = 23.

Demnach schert sich recordcount nicht um den Filter !?? Ist das so?
Wie kann man dennoch gefilterte Tabellen durchzählen ?

Einige andere Beiträge zum Thema filtern im Forum Datenbanken sehen mir allerdings so aus, als würde sehr wohl nur die gefilterte Menge gezählt.
Was mache ich denn falsch ?

Gruss,
ST2000

woki 15. Okt 2003 20:20

Re: Recordcount wenn filtered=true ?!?
 
Hallo,

es macht die Sache einfacher, wenn man erfährt, um welche Komponenten es hier geht.


tschüss
woki

st2000 15. Okt 2003 20:41

Re: Recordcount wenn filtered=true ?!?
 
Naja, konkret eine TTable, aber wäre ja im Zweifel auf alle TDataSet-Nachkommen anzuwenden...
Die Tabelle tbl1 befüllt via einer DataSource1 ein TDBGRid1.

Ich filtere die Tabelle mittels ID 51, so das nur ein Datensatz rauskommen kann. Zeigt das Grid auch so an. Aber ein tbl1.recordsetcount zählt (ausgeführt nach dem tbl1.filtered:=true !!!) immer ALLE 23 Datensätze, die ich in der Tabelle drin habe. :shock:

Jetzt suche ich so eine Art "tbl1.filteredrecordsetcount"-Funktion... :|

War es das, was Dir noch fehlte ?

Gruss,
ST2000

Leuselator 15. Okt 2003 22:33

Re: Recordcount wenn filtered=true ?!?
 
RecCount geistert immer wieder hier durch's Forum, allein - ich kann's net nachvollziehen wozu so'n Reccount gut ist. Ein sicherer Weg um Records zu zählen ist noch immer eine Selectanweisung der Form:
SQL-Code:
select count(*) where [SelbeBedingungWieInDemEigentlichenSelect]
Das schnuckelt bei Regen, Schnee und Sonne :-)

st2000 16. Okt 2003 10:27

Re: Recordcount wenn filtered=true ?!?
 
Schon, aber das geht ja nur , wenn man TQuery nutzt. Ich hab hier aber einen im Grunde sehr simplen Dialog, der eine Stammdatentabelle in einem Grid anzeigt. Dafür würde ich nur ungern mit SQL-Statement-Generierung auf String-Basis arbeiten (kommt einem immer mal ein Komma zuviel rein, und schon kann man wieder suchen...).
Sowas würde ich nur für 1:N-Zugriffe machen wollen/müssen.

Und wenn man sicherstellen will, daß ein Suchkriterium nur 1x gefunden wird, ist es m.E. sinnvoll, das mit

Delphi-Quellcode:
if tbl1.recordcount > 1 then tbl1.close;
showmessage('Mehrfach vorhanden!');
exit;
zu prüfen.

Habe aber mal mit Setrange rumprobiert, und damit gehts. Recordcount zählt auch nur 1, nicht 23...Prima.

Wozu gibts eigentlich diese ganzen unetrschiedlichen Filter und Suchmöglichkeiten ? Historisch gewachsen ?
Filter, Setrange, Locate, Findkey... Vielfalt ist ja schön, aber mir ist nicht klar, ob es je bestimmte Situationen gibt, in denen ich (nach der Ausgangsidee von Borland) nun Filter oder Setrange einsetzen soll. ?!?

Gruss,
ST2000

woki 16. Okt 2003 19:16

Re: Recordcount wenn filtered=true ?!?
 
Hi

Zitat:

Zitat von st2000
Naja, konkret eine TTable, aber wäre ja im Zweifel auf alle TDataSet-Nachkommen anzuwenden...

Nicht wirklich, weil es eine Unzahl von Nachkommen von TDataset gibt, und die müssen die gleiche Property durchaus nicht alle identisch implementieren, insbesondere habe ich aber gefragt weil,

Zitat:

Recordcount unfiltered Table1 45603
Recordcount filtered Table1 16590
Recordcount unfiltered ClientDataSet1 128
Recordcount filtered ClientDataSet1 40

in allen mir bekannten Fällen Recordcount nämlich wie in dem obigen Beispielen nur die nicht gefilterten Datensätze zählt, wie Du das wolltest. Ich interpretiere deshalb das von dir beschriebene Verhalten eher als Bug, und da ist es dann schon recht wichtig, genau zu wissen, was alles beteiligt ist. Es scheint mir so, als würdest du mit TTable über BDE über ODBC azf Access zugreifen, einfach kein empfehlenswerter Weg, vielmehr ist hier TBetterAdodataset zu empfehlen, wenn Ado zur Verfügung steht.

Grüsse
Woki


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