Wie viele Zeile befinden sich in meiner Datenbank?

  • Access

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von DoSchwob.

    Wie viele Zeile befinden sich in meiner Datenbank?

    Hi Leute,

    ich hab hier folgendes Problem: Ich hab eine Datenbank die immer wieder wächst. Sprich: Es werden immer wieder Zeilen angefügt. Wie finde ich nun am besten heraus, wie viele Zeilen sich in meiner Datenbank befinden? Die EOF-Methode hab ich schon im Einsatz, aber diese liefert ja nur einen booleschen Werte zurück der sagt ob das Ende der DB erreicht ist oder nicht. Ich möchte aber einen Integerwert der mir die wirkliche Zeilenanzahl zurückliefert.

    Habt ihr eine Idee?

    Hilfreich wäre so ein Ausdruck wie der hier:

    Visual Basic-Quellcode

    1. lastRow = Cells(Rows.Count, 1).End(xlUp).row + 1
    . Dieser Ausdruck ist von mir aber auf ein Excel-Sheet angepasst...



    Danke!

    bandchef schrieb:

    Wie finde ich nun am besten heraus, wie viele Zeilen sich in meiner Datenbank befinden?

    In einer Datenbank befinden sich EIGENTLICH nie "Zeilen", sondern DATENSÄTZE

    bandchef schrieb:

    Dieser Ausdruck ist von mir aber auf ein Excel-Sheet angepasst...

    Aha. Und das heißt? Du hast einen Access-Code (deswegen auch der Thread-Tag) und möchtest den auf Excel anwenden (denn Excel HAT Zeilen), oder du hast einen Excel Code (weil irgendwann mal jemand Excel vergewaltigt hat und es als DB missbraucht hat) und möchtest jetzt wissen, wie das analog bei Access funzt?
    Hier wieder die Frage vom letzten Mal,

    eine Datenbank hat mehrere Tabellen (wenn relational) und jede Tabelle hat mehrere Datensätze/Tupel (Zeilen).
    Wenn du alle "Zeilen" einer Datenbank willst, müsstest du ja für jede in der Datenbank enthaltene Tabelle, ein immer gefülltes Attribut(Spalte) wie ZB eine ID abfragen.
    Diese müsstest dann pro Tabelle mit

    SQL-Abfrage

    1. SELECT ID FROM tabellenname
    abfragen und könntest dann via RecordCount die Anzahl in eine Variable schreiben und zusammen addieren.
    Jedoch ergibt sich für mich da erstmal kein Sinn.

    Die Frage erinnert mich ein wenig an die auch von dir gestellte Frage:
    [VB 2008] Was macht .RecordCount?
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Hier wieder die Frage vom letzten Mal,

    eine Datenbank hat mehrere Tabellen (wenn relational) und jede Tabelle hat mehrere Datensätze/Tupel (Zeilen).
    Wenn du alle "Zeilen" einer Datenbank willst, müsstest du ja für jede in der Datenbank enthaltene Tabelle, ein immer gefülltes Attribut(Spalte) wie ZB eine ID abfragen.
    Diese müsstest dann pro Tabelle mit
    SQL-Abfrage(n)1 SELECT ID FROM tabellennameabfragen und könntest dann via RecordCount die Anzahl in eine Variable schreiben und zusammen addieren.
    Jedoch ergibt sich für mich da erstmal kein Sinn.

    Die Frage erinnert mich ein wenig an die auch von dir gestellte Frage:
    [VB 2008] Was macht .RecordCount?





    Wie ihr bestimmt schon bemerkt habt, bin ich DB-Neuling.

    Ich hab einen Access-Code, der mir in diesem Fall auf eine Access-Datenbank zugreift und, dass in einer Datenbank anstatt Zeilen Datensätze vorhanden sind, weiß ich ja eigentlich auch.

    Wie gesagt, ich möchte nun die Anzahl der Datensätze als Integer zur Verfügung haben. Das .RecordCount zählt ja den Inhalt der DB, aber gibt mir doch keinen echten Integer zurück, oder?

    Die SQL-Abfrage die ich dafür schreiben soll, ist mir auch nicht ganz klar. Select ID From Tabellenname liefert mir ja die ID's (bspw. laufende Nummer zurück). Es kann aber doch auch sein, dass bspw. von 1273 Datensätz die alle irgendwann mal von 1 bis 1273 durchnummeriert wurde, der 63. Datensatz gelöscht wird und dafür ein neuer 1274. Datensatz UNTEN angefügt wird. Wenn ich nun die ID auslese, dann gibt mir die ID keinen Aufschluss mehr über die wirklich Anzahl der verfügbaren Datensätze!
    Also nochmal.

    Access ist eine Datenbank. Ne Datenbank hat keine Datensätze sondern Relationen (Tabellen).
    Willst du nun wirklich ALLE Zeilen der DATENBANK haben, oder die Zeilen einer der enthaltenen Tabellen?
    Mit

    SQL-Abfrage

    1. SELECT * FROM Tabellenname
    kriegst du alle Daten der Tabelle "Tabellenname". Da du ja .RecordCount kennst, weißt du auch, dass du von der gestellten Abfrage die Anzahl der enthaltenen Datensätze kriegst.

    Wenn du die Zeilen einer Tabelle haben willst, kannst du so vorgehen.
    Schöne wäre es natürlich (weil wegen geringerem Traffic), wenn du nicht SELECT * benutzen würdest, sondern ein immer gefülltes Atribut abrufst, wie zB eine ID.

    SQL-Abfrage

    1. SELECT ID FROM Tabellenname
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Meine Datenbank beinhaltet zwei Tabellen: PM und PMOver. Ich möchte die Anzahl der Datensätze der Tabelle PM.

    Ich hab dann mal das jetzt so gemacht:

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("Select Row From PM;", dbOpdenDynaset)


    Row ist sowas wie eine ID, die definitiv gefüllt ist. Wie muss ich nun die Variable rsPM mir RecordCount "verbinden"? Wenn ich sowas schreibe

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("Select Row From PM;", dbOpenDynaset)
    2. anzahl = rsPM.RecordCount
    dann steht in anzahl eine 1. Das ist falsch. Leider.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „bandchef“ ()

    Wenn die Tabelle PM eine Spalte ID hat oder etwas derart könntest du mit dem Befehl

    SQL-Abfrage

    1. SELECT ID FROM PM
    arbeiten und dir hierzu den .RecordCount auslesen.
    Da ich die enthaltenen Attribute nicht kenne, weiß ich aber nicht ob ID bei dir immer gefüllt oder überhaupt enthalten ist.

    mit

    SQL-Abfrage

    1. SELECT * FROM PM
    und zugehörigem .RecordCount kriegst du ebenfalls die Anzahl der Datensätze, erzeugst aber logischerweise auch mehr Traffic, da er da alle Daten der Tabelle rüber schaufelt.

    Im Grunde holst du dir ja immer nur Informationen von der Datenbank.
    Die ersten Wörter die man verstehen sollte als Neuling sind wohl
    SELECT (Hol mir...) danach kommt eine Liste mit Namen der Attribute (Spalten) einer Relation (Tabelle) oder * (aka ALLES)
    FROM (aus der Tabelle) danach kommt der Name der entsprechenden Relation (Tabelle) in der die gewünschten Attribute vorhanden sind
    WHERE (wo... Bedingung) danach kannst du eine oder mehrere Bedingungen auflisten. zB. WHERE Price > 19.99

    Als Antwort erhält dein Programm eine Art Tabelle... Und mit der kannst du arbeiten. In der sind aber nur die gefragten Informationen enthalten und auch das .RecordCound bezieht sich ausschließlich auf die übertragenen / abgefragten Daten.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „MemoAnMichSelbst“ ()

    Ich hab meine vorletzte Antwort editiert. Da hat sich jetzt was überschnitten.

    Wie gehe ich mit RecordCount weiter vor? So wie mein Vorschlag oben bekomme ich leider ein falsches Ergebnis geliefert...

    @xtts02:

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("SELECT COUNT(*) AS Datensätze FROM PM;", dbOpenDynaset)
    2. anzahl = rsPM.RecordCount
    liefert leider auch nur die falsche 1. Ich hab definitiv mehr Datensätze in der Tabelle der DB, wie einen einzigen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „bandchef“ ()

    Weil das COUNT-Statement dir die Anzahl zurück gibt, 1 Zeile bzw. 1 Datensatz welcher die Nummer der Datensätze enthält.

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("SELECT COUNT(`id`) AS `dataCount` FROM PM;", dbOpenDynaset)
    2. anzahl = rsPM("dataCount")


    ich weiß nicht wie man dort auf eine Spalte zugreift, aber du siehst ja wie es machen musst, die Anzahl befindet sich in der Spalte "dataCount". Zudem würde ich nicht * nehmen weil dann ALLE Spalten mit einbezogen werden und das ist ja irgendwie Sinnlos, du musst nur eine Spalte angeben, da dies ja unabhängig ist, du willst ja Datensätze zählen und da reicht es wenn nur eine Spalte angezeigt wird. Zudem optimiert es den Query, er is schneller, da nur eine Spalte rausgesucht werden muss.
    Die rsPM-Variable hat den Datentyp eines DAO.RecordSet. Die SQL-Query von xtts02 hat aber auch an eine integer-Variable einen Fehler ausgespuckt...

    Ich hab mir nun zum count()-Statement eine Erklärung durchgelesen und eigentlich ist das schon genau das was ich haben will. anzahl ist als Integer deklariert. Warum funktioniert dann

    Visual Basic-Quellcode

    1. anzahl = CurrDB.OpenRecordset("SELECT COUNT(Row) FROM PM;", dbOpenDynaset)
    trotzdem nicht?
    Entweder:

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("SELECT * FROM PM", dbOpenDynaset)
    2. anzahl = rsPM.RecordCount
    --> Hier arbeitet dein Programm zum Zählen
    oder:

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("SELECT COUNT(*) AS Anzahl FROM PM", dbOpenDynaset)
    2. anzahl = rsPM("Anzahl").value
    --> Hier arbeitet die Datenbank zum zählen

    Und in beiden Fällen solltest du kein * wählen, sondern eine immer gefüllte Spalte...
    Da es IMMER eine Mehrarbeit ist... Egal wo es nun gemacht wird.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    MemoAnMichSelbst schrieb:

    Entweder:

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("SELECT * FROM PM", dbOpenDynaset)
    2. anzahl = rsPM.RecordCount
    --> Hier arbeitet dein Programm zum Zählen
    oder:

    Visual Basic-Quellcode

    1. Set rsPM = CurrDB.OpenRecordset("SELECT COUNT(*) AS Anzahl FROM PM", dbOpenDynaset)
    2. anzahl = rsPM("Anzahl").value
    --> Hier arbeitet die Datenbank zum zählen



    Das erste Statement funktioniert nicht! Nach Ausführung steht eine 1 drin.

    Das zweite Statement funktioniert korrekt.
    Dem verstehe ich nun nicht.
    SELECT * FROM PM holt alle Datensätze aus der Tabelle PM und der RecordCount darf da nicht 1 sein oO
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D