Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi RecordCount ????? (https://www.delphipraxis.net/12851-recordcount.html)

Snyderburn 5. Dez 2003 09:44


RecordCount ?????
 
Hi!

Habe gerade von einem Kollegen erfahren, dass das Benutzen des "RecordCount" nur bei Desktopdatenbanken richtig funktioniert?????

Ich weis nicht, ob das stimmt, was er mir erzählt hat!

Kann mir da jemand ne Antowort drauf geben?!?!

mfg
Snyderburn

sakura 5. Dez 2003 09:49

Re: RecordCount ?????
 
Das stimmt in den meisten Fällen schon. Aber mit einer einfachen SQL-Abfrage kann man das umgehen.

SQL-Code:
SELECT Count(1) FROM tblAaky WHERE (ID < 50546)
oder wie auch immer Deine Bedingung sein soll. Im ersten zurückgelieferten Record, im ersten Feld steht dann die Gesamtanzahl aller Records.

...:cat:...

Bernhard Geyer 5. Dez 2003 10:39

Re: RecordCount ?????
 
Zitat:

Habe gerade von einem Kollegen erfahren, dass das Benutzen des "RecordCount" nur bei Desktopdatenbanken richtig funktioniert?????
RecordCount funktioniert u.U. auch bei "richtigen" SQL-Datenbanken. Hierbei kommt es jedoch sowohl auf den Zugriffsweg (BDE->ODBC, ADO, ...) als auch auf den Cursor-Type an.
Bei MS-SQL bekommt man bei Zugriff über ADO und einem Client-Cursor auch einen gültigen RecordCount.

RecordCount ist auch dann gültig wenn mittels MoveLast (Ich hoffe richtiger Methodenname) zum letzten Datensatz gesprungen wird und damit alle Datensätze zum Client übertragen werden müssen.

Robert_G 5. Dez 2003 11:31

Re: RecordCount ?????
 
Sakuras Methode funktioniert in jedem Fall.
Da musst du nicht erst durch sämtlich Records laufen...
(Und hast auch keine Fummeleien mit irgendwelchen Eigenheiten der Compo mit der du auf die DB zugreifst)

Bernhard Geyer 6. Dez 2003 12:38

Re: RecordCount ?????
 
Sakuras Methode hat aber 2 Nachteile:

1, Wenn der SQL-String dynamisch zusammengebaut wurde muß ich mir einen passenden SQL-Count-String aus dem SQl-String erstellen

2, Falls die SQL-Abfrage komplizierter ist (z.B. 2-3 Sekunden auf dem Server benötigt), so wird diese Zeit in ähnlichen Rahmen nochmal für die Count-Abfrage benötigt

MrSpock 6. Dez 2003 17:21

Re: RecordCount ?????
 
Hallo Snyderburn,

bei Interbase werden z.B. nur soviele Datensätze auf einmal heruntergeladen wie angezeigt werden können. Werden die Daten gar nicht angezeigt, wird genau ein Datensatz heruntergeladen. RecordCount zeigt dann die Anzahl vom Server geholter Datensätze an. die IBx Komponenten kennen die Methode FetchAll, die alle Datensätze holt, dann stimmt auch RecordCount. Im allgemeinen ist eine direkte Abfrage:

SQL-Code:
SELECT COUNT (*) FROM myTable
die sicherste Methode.

Robert_G 6. Dez 2003 21:09

Re: RecordCount ?????
 
Wie bei einem Cursor in der DB bekommst du mit ".RecordCount" die Anzahl der Datensätze, die bis dahin durchlaufen wurden.

Hast du einen Abfrage, die meinetwegen ein Grid füllt, ausgeführt und willst zum Schluss die Anzahl der Einträge wissen.
Dann wird dir RecordCount auch die exakte Anzahl zeigen.

Ansonsten musst du "SELECT Count(*)" nutzen. Wenn du auf einer prof. DB arbeitest dann wird der Optimizer sowieso erkennen, dass du nicht den Inhalt der Tabelle willst, sondern nur die Anzahl der Einträge.
SQL-Code:
SELECT count(*)
FROM  Tabelle
ist deshalb immer schneller als
SQL-Code:
SELECT *
FROM  Tabelle


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