Die ID (Primärschlüsselwert) ist nur dann ein Indikator für die Anzahl der Datensätze, wenn
- die Zählung mit 1 beginnt
- für jeden gelöschten Datensatz sofort ein neuer Datensatz mit der entsprechenden ID eingetragen wird
Den Beginn kannst Du ja noch steuern, das Eintragen eines neuen Datensatzes direkt nach der Löschung eines alten Datensatzes aber nicht.
Ich habe mir zu Anfang auch darüber Gedanken gemacht, weil die Nutzer einer Bibliotheksdatenbank unbedingt über die ID sehen wollten, wie viele Medien in der Datenbank verzeichnet sind. Das funktionierte dann so, dass zuerst immer die Lücken ausgefüllt wurden - ein mühsames Geschäft, nur mit Makros hin zu bekommen und natürlich stimmte die letzte ID in der Regel nicht, weil eben mehrere Lücken noch frei waren. Noch schlimmer war dann, dass es sich bei der ursprünglichen Datenbank um MyISAM-Tabellen von MySQL handelte. Ich musste also mit der Programmierung dafür sorgen, dass die Integrität der Daten auch beim Löschen gewährleistet wurde.
Ich würde das Problem so lösen, wie ich das auch im Handbuch beschrieben habe:
SELECT ( SELECT COUNT( “ID” ) FROM “Tabelle” WHERE “ID” <= “a”.“ID” ) AS “lfdNr.”, “a”.*
FROM “Tabelle” AS “a”
Mit der Unterabfrage zählst Du die Zeilen. Zeigt Dir immer die Zeile an, auf der Du Dich in der Abfrage befindest - wie eben die Datensatzzahl, die ebot in seinem Beitrag zeigt.