Anweisung

Recordset-Funktionen statt den Domänen-Aggregatfunktionen verwenden.

Zur Vermeidung von

  • Geschwindigkeitsproblem

Beschreibung

Aggregatfunktionen sind sehr praktisch in ihrer Anwendung, da man schnell zum gewünschten Ergebnis kommt.
Sie sind aber meist langsamer im Vergleich zur Datenermittlung über SQL und Recordset-Objekten.

Lösung: Ersatzfunktionen für Dcount, Dmax, …

Beispiel RstLookup statt Dlookup:

Public Function RstLookup( _
            ByVal sFieldName As String, _
            ByVal sSource As String, _
   Optional ByVal sCriteria As String = "" _
   ) As Variant

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String

On Error GoTo HandleErr

    strSQL = "SELECT " & sFieldName & _
             " FROM (" & sSource & ")"
    If len(sCriteria) > 0 Then
        strSQL = strSQL & " WHERE " & sCriteria
    End If

    Set db = CurrentDB
    ' oder Methode aus D13
    ' Set db = CurrentDAODB
    Set rst = db.OpenRecordset(strSQL)
    With rst
        If .EOF Then
            RstLookup = Null
        Else
            'Rückgabe des 1. Feldes
            RstLookup = .Fields(0)
        End If
    End With

ExitHere:
On Error Resume Next
    rst.Close
    Set rst = Nothing
    set db = Nothing
    Exit Function

HandleErr:
    Select Case Err.Number
    Case Else
        ' Fehlerbehandlung
        ' HandleError Err.Number, "RstLookup"
    End Select
    RstLookup = Null
    Resume ExitHere

End Function

RstMax:
Code ist ähnlich RstLookup mit folgender SQL-Syntax:

strSQL = _
    "SELECT Max(" & sFieldName & ") As DSMax" & _
    " FROM  (" & sSource & ")"
If sCriteria > vbNullString Then
    strSQL = strSQL & " WHERE " & sCriteria
End If

Weitere Beispiele sind in der AccEPT-DB im Modul modDAO enthalten. (DB steht im Download-Bereich zur Verfügung.)

Externe Referenzen