Guten Morgen!
Ich arbeite momentan mit einer Tabelle die mehr als 800.000 Datensätze besitzt.
Ich muss die Anzahl der Datensätze mit einer bestimmten Belegnummer zählen.
Anfangs tat ich das ganz einfach mit DLookup("[Feld]", "Tabelle", "Kriterium").
Habe im Internet jedoch eine clevere Variante gefunden, die das ganze etwas zu beschleunigt:
Ist mir dennoch etwas zu langsam.
Das Feld Belegnummer ist indiziert.
Hat jemand von euch eine Idee, was sich da noch machen lässt?
Grüße Bexlight
Ich arbeite momentan mit einer Tabelle die mehr als 800.000 Datensätze besitzt.
Ich muss die Anzahl der Datensätze mit einer bestimmten Belegnummer zählen.
Anfangs tat ich das ganz einfach mit DLookup("[Feld]", "Tabelle", "Kriterium").
Habe im Internet jedoch eine clevere Variante gefunden, die das ganze etwas zu beschleunigt:
Visual Basic-Quellcode
- Function fcDomWert(Expression As String, Domain As String, _
- Optional Criteria As String, _
- Optional ltDomArt As ltDomWert = ltDLookup) As Variant
- Dim strSQL As String
- Dim rs As DAO.Recordset
- Select Case ltDomArt
- Case 0: strSQL$ = "SELECT " & Expression$ & " FROM " & Domain$
- Case 1: strSQL$ = "SELECT COUNT(" & Expression$ & ") FROM " & Domain$
- Case 2: strSQL$ = "SELECT MAX(" & Expression$ & ") FROM " & Domain$
- Case 3: strSQL$ = "SELECT MIN(" & Expression$ & ") FROM " & Domain$
- Case 4: strSQL$ = "SELECT FIRST(" & Expression$ & ") FROM " & Domain$
- Case 5: strSQL$ = "SELECT LAST(" & Expression$ & ") FROM " & Domain$
- Case 6: strSQL$ = "SELECT SUM(" & Expression$ & ") FROM " & Domain$
- Case 7: strSQL$ = "SELECT AVG(" & Expression$ & ") FROM " & Domain$
- End Select
- If Nz(Criteria$, "") <> "" Then strSQL$ = strSQL$ & " WHERE " & Criteria$
- Set rs = CurrentDb.OpenRecordset(strSQL$, dbOpenForwardOnly)
- If rs.EOF Then
- fcDomWert = Null
- Else
- fcDomWert = rs.Fields(0)
- End If
- ' Debug.Print fcDomWert 'Nur zum Testen
- rs.Close
- Set rs = Nothing
- End Function
Ist mir dennoch etwas zu langsam.
Das Feld Belegnummer ist indiziert.
Hat jemand von euch eine Idee, was sich da noch machen lässt?
Grüße Bexlight
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bexlight“ ()