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

Problemstellung:

Für 32Bit und 64Bit Office Versionen

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

You have no rights to post comments

Login Form

Neueste Artikel

SQL zu VBA Konverter
26. Oktober 2018
Problemstellung: Nur für 32Bit Office Versionen 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...
1.png5.png7.png6.png1.png1.png5.png
Heute111
Gestern206
Diese Woche317
Dieser Monat4738
Total1576115

  • IP: 23.20.220.59
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

1
Online

19. März 2024

Letzte Kommentare

  • Berechnen von Zeiträumen als Abfragekriterium

    elmard 02.02.2021 21:02
    1000 Dank
    für diese Datenbankanwendung! Eine sehr gute Umsetzung mit den vielen Möglichkeiten des Datums.

    Weiterlesen...

     
  • SQL zu VBA Konverter

    Tommy Admin 03.11.2019 16:33
    RE: SQL zu VBA Konverter
    Hallo Elmard, danke für die Info. :lol:

    Weiterlesen...

     
  • SQL zu VBA Konverter

    elmard 03.11.2019 14:49
    Bei SmartTools neue Version 4.0
    Dieses Tool liegt inzwischen in der Version 4 vor und läuft nun auch von A2013 und A2016 sowie im ...

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    TommyK 27.02.2019 06:52
    Workshop
    Hallo mpegjunkie, danke für Dein Feedback. Schön das Dir Workshop weiter hilft. :D

    Weiterlesen...

     
  • Workshop zur Benutzung des Multi-Column TreeView Control unter MS-Access

    mpegjunkie 26.02.2019 20:10
    Perfekter Workshop
    Hallo Tommy, perfekter Workshop, toll und umfassend erläutert. Jetzt nutze ich diese Controls auch.

    Weiterlesen...