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 Laden des Formulars die Anzahl der Datensätze per VBA als Wert zugewiesen.

Private Sub Form_Load()
 
   Me.EinTextfeld = Me.RecordsetClone.RecordCount
 
End Sub

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

Private Sub Form_Load()
 
   Me.EinBezeichnungsfeld.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 kürzer:
=DomAnzahl("*";"tblBestellungen";"KundenNr=Form!KundenNr)


  • Möglichkeit 3 (Wertzuweisung):
Wertzuweisung an ein Textfeld im Hauptformular
   'entweder Verwendung der RecordCount-Eigenschaft
   Me.EinTextfeld = Me.EinUFSteuerelement.Form.RecordsetClone.RecordCount
 
   'oder Verwendung der DCount-Funktion
   Me.EinTextfeld = DCount("*", "tblBestellungen", "KundenNr = " & Nz(Me.KundenNr, 0))
 
   'oder Verwendung von SQL
   Dim sql As String
 
   sql = "SELECT COUNT(*) FROM tblBestellungen WHERE KundenNr = [@KundenNr]"
   With CurrentDb.CreateQueryDef(vbNullString, sql)
      .Parameters("KundenNr") = Me.KundenNr
      Me.EinTextfeld = .OpenRecordset(sql, dbOpenForwardOnly)(0)
   End With
Auch hier ist alternativ die Wertzuweisung an ein Bezeichnungsfeld möglich.
   Me.EinBezeichnungsfeld.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.EinUFSteuerelement.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.