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

You have no rights to post comments

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.png7.png3.png5.png5.png3.png
Heute9
Gestern193
Diese Woche1157
Dieser Monat2681
Total1273553

  • IP: 34.237.51.159
  • Browser: Unknown
  • Version:
  • OS: Unknown

Online

1
Online

15. Dezember 2019

Letzte Kommentare

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

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