1 1 1 1 1 1 1 1 1 1 Rating 5.00 (1 Vote)

Problemstellung:

Die Dömanenfunktionen wie DLookup, DCount, DSum usw. sind schon eine feine Sache.
Der Haken ist nur das diese Funktionen unendlich langsam sind.
Eine Alternative wären SQL-Funktionen die in einem Recordset aufgerufen werden.
Hier eine Lösung dafür. 


Verweis auf die Microsoft DAO 3.X Object Library erforderlich

Public Enum ltDomWert
     ltDLookup = 0
     ltDCount = 1
     ltDMax = 2
     ltDMin = 3
     ltDFirst = 4
     ltDLast = 5
     ltDSum = 6
     ltDAvg = 7
 End Enum
 
 Function fcDomWert(Expression As String, Domain As String, _
     Optional Criteria As String, _
     Optional ltDomArt As ltDomWert) As Variant
     Dim bytWert As Byte
     Dim strSQL As String
     Dim rs As DAO.Recordset
     If IsMissing(ltDomArt) Then
         bytWert = 0
     Else
         bytWert = ltDomArt
     End If
     Select Case bytWert
         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 SUM(" & 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
     rs.Close
     Set rs = Nothing
 End Function

Mit dieser Funktion können alle Domänenfunktionen abgedeckt werden.
Aufruf:
Um z.B. die Summe von Datensätzen zu erhalten die einem bestimmten Kriterium entsprechen.

Dim i As Integer
 i = fcDomWert("DeinAutowertfeld", "DeineTabelle", "[DeinKriteriumsfeld] = " _
     & DeinKriterium, ltDCount)


Das ist nur ein Bsp.

Ähnliche Artikel

Kommentar schreiben

Sicherheitscode
Aktualisieren

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: Gibt es eine Möglichkeit SQL-Code einer Abfrage so zu konvertieren das der Code in VBA genutzt werden kann? Lösung: Bis Access 2010 gibt das Tool "SmartTools SQL aus Abfragen 3.0"...
1.png2.png1.png2.png4.png9.png2.png
Heute0
Gestern83
Diese Woche0
Dieser Monat1292
Total1212492

  • IP: 54.227.186.112
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

1
Online

17. Dezember 2018

Letzte Kommentare

  • Trusted Locations Manager

    Tommy Admin 13.07.2018 13:06
    RE: Trusted Locations Manager
    Hallo Matthias, aus Ermangelung einer 64bit Version kann ich das leider nicht prüfen. Tut mir leid. Gruss ...

    Weiterlesen...

     
  • Trusted Locations Manager

    Matthias 13.07.2018 06:48
    Funktioniert nicht
    Habe gerade den TL-Manager installiert. Nach dem Start sagt er mir, dass es kein Office erkennen ...

    Weiterlesen...