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.)