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.

Wenn das Formular keine Datensätze enthält und die Formulareigenschaft Anfügen zulassen auf Nein steht, bleibt das Textfeld leer.


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 oder beim Laden (Form_Load) des Formulars die Anzahl der Datensätze per VBA als Wert zugewiesen. Beim Ändern des Formularfilters oder bei jeder Änderung der Anzahl der Datensätze muss der Code wiederholt verwendet werden.

Private Sub Form_Open()
 
   Me.EinTextfeld = Me.RecordsetClone.RecordCount
 
   ' oder alternativ:
   ' Me.EinTextfeld = Me.Recordset.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.