Access Anfänger: Anzahl der Datensätze eines Formulars anzeigen

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Ich möchte die Anzahl der Datensätze eines Formulars (z.B. eines Endlosformulars) in einem Textfeld oder in einem Bezeichnungsfeld im Formularkopf oder -fuß anzeigen.

Lösung als Steuerelementinhalt

Verwendung der Anzahl-Funktion In ein ungebundenes Textfeld wird als Steuerelementinhalt der Ausdruck =Anzahl(*) eingetragen.


Wiki hinweis.png Anmerkung: Bis Access 2003 gab es noch eine weitere Lösungsmöglichkeit. In ein ungebundenes Textfeld wird als Steuerelementinhalt der Ausdruck =[RecordsetClone].[RecordCount] eingetragen. Diese Lösung funktioniert in späteren Access-Versionen nicht mehr.


Lösung durch Wertzuweisung

Einem ungebundenen Textfeld wird z.B. beim Öffnen des Formulars die Anzahl der Datensätze per VBA als Wert zugewiesen.

Private Sub Form_Open(Cancel As Integer)
 
 Me!MeinTextfeld = Me.RecordsetClone.RecordCount
 
End Sub

Alternativ kann die Anzahl der Datensätze auch einem Bezeichnungsfeld als Beschriftung zugewiesen werden.

Private Sub Form_Open(Cancel As Integer)
 
 Me!MeinBezeichnungsfeld.Caption = Me.RecordsetClone.RecordCount
 
End Sub


Lösungen für Unterformulare

Um die Anzahl der Datensätze eines Unterformulars im Hauptformular anzuzeigen, gibt es folgende Möglichkeiten:


  • Möglichkeit 1 (Steuerelementinhalt):
    • Erstelle ein ungebundenes Textfeld im Formularkopf des Unterformulars z.B. mit dem Namen MeinUFAnzahlfeld.
      Das Textfeld kann unsichtbar sein.
    • Weise dem Textfeld folgenden Steuerelementinhalt zu: =Anzahl(*)
    • Erstelle ein weiteres ungebundenes Textfeld im Formularkopf des Hauptformulars z.B. mit dem Namen MeinHFAnzahlfeld.
    • Beziehe dich auf den Wert des Textfeldes im Unterformular, indem du dem Textfeld im Hauptformular folgenden Steuerelementinhalt zuweist, z.B.: =[Formulare]![MeinHauptformular]![MeinUFSteuerelement].[Formular]![MeinUFAnzahlfeld]


  • Möglichkeit 2 (Steuerelementinhalt):
Die Anzahl der Datensätze wird aus der dem Unterformular zugrundeliegenden Tabelle über die Domänenaggregat-Funktion DomAnzahl ausgelesen.
Dazu wird folgender Ausdruck als Steuerelementinhalt eines ungebundenen Textfeldes im Hauptformular eingetragen, z.B.:
=DomAnzahl("*";"[tblBestellungen]";"[KundenNr]=[Formulare]![frmKundenHF]![KundenNr]")
oder alternativ:
=DomAnzahl("*";"[tblBestellungen]";"[KundenNr]=" & [KundenNr])


  • Möglichkeit 3 (Wertzuweisung):
Wertzuweisung an ein Textfeld im Hauptformular
'entweder Verwendung der RecordCount-Eigenschaft
Me!MeinTextfeld = Me!MeinUFSteuerelement.Form.RecordsetClone.RecordCount
 
'oder Verwendung der DCount-Funktion
Me!MeinTextfeld = DCount("*", "tblBestellungen", "[KundenNr] = " & Me![KundenNr])
 
'oder Verwendung von SQL
Dim sql As String
sql = "SELECT COUNT (*) FROM tblBestellungen WHERE [KundenNr] = " & Me![KundenNr]
Me!MeinTextfeld = DBEngine(0)(0).OpenRecordset(sql, dbOpenForwardOnly)(0)
Auch hier ist alternativ die Wertzuweisung an ein Bezeichnungsfeld möglich.
Me!MeinBezeichnungsfeld.Caption = ...
Wiki hinweis.png Anmerkung: In älteren Access-Versionen (z.B. Access 2003) muss vor der Wertzuweisung an ein Textfeld bzw. Bezeichnungsfeld der Fokus auf das Unterformular-Steuerelement gesetzt werden: Me!MeinUFSteuerelement.SetFocus



Wiki hinweis.png Hinweis zur Performance: Die Wertzuweisung an ein Textfeld bzw. Bezeichnungsfeld per VBA liefert das Ergebnis wesentlich schneller als die Verwendung eines Ausdrucks als Steuerelementinhalt.