TKSoft-Online

Domänenfunktionen-Ersatz PDF Drucken E-Mail
( 1 Vote )
MS-Access Codes - Codeschnipsel DAO
  
Donnerstag, den 28. Februar 2008 um 06:00 Uhr

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.
Wenn es Probleme gibt könnt Ihr mit folgendem Button im Forum dazu diskutieren.

DatumKlicks
Total2210
Mi. 233
Di. 222
Mo. 211
So. 207
Sa. 192
Fr. 182
Do. 171
Aktualisiert ( Freitag, den 02. Juli 2010 um 06:28 Uhr )
 

Kommentar schreiben


Sicherheitscode
Aktualisieren

Login

Latest Comments

Latest Forum Posts

Mehr »

Download Statistik

41 Kategorien
187 Dateien
173466 Downloads