Tipp 4.2 - ADO-DOM Funktionen
Wie kann ich die verschiedenen DOM Funktionen innerhalb einer Prozedur simulieren (ADO)?
Mit dieser Funktion können Sie die verschiedenen Domänenaggregat Funktionen unter ADO innerhalb einer Prozedur simulieren. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Hinweis: Durch spezielle Anweisungen können Sie diese Funktion erst ab Access 2000 einsetzen.
Beispiel:
Option Explicit Public Enum eDomainType dtAvg = 0 ' Mittelwert dtCount = 1 ' Anzahl dtFirst = 2 ' Erster DS dtLast = 3 ' Letzter DS dtMax = 4 ' Höchster Wert dtMin = 5 ' Niedrigster Wert dtLookup = 6 ' Wert allgemein dtSdtev = 7 ' Standardabweichung dtSum = 8 ' Summe dtVar = 9 ' Varianz End Enum Public Function A2XADODomain( _ peType As eDomainType, _ psField As String, _ psDomain As String, _ Optional psDbs _ As String = vbNullString, _ Optional psCriteria _ As String = vbNullString) _ As Variant '// ===================================================== '// Methode | Simuliert die Domänenaggregatfunktionen '// | unter ADO (performanter) '// ----------------------------------------------------- '// Parameter | peType - Funktionstyp '// | psField - Tabellen-/Abfragefeld '// | psDomain - Tabelle/Abfrage '// | psDbs - Optional Pfad & Name der DB '// | psCriteria - Optional Kriterium '// | Hinweis - Das Enum eDomainType sollte '// | vorab auf Modulebene '// | deklariert sein! '// ----------------------------------------------------- '// Rückgabe | Variant - Wert bzw. NULL falls kein DS '// | vorhanden '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Beispiel | ?A2XADODomain(dtSum,"Einzelpreis", _ '// | "Artikel") '// | ?A2XADODomain(dtSum,"Einzelpreis", _ '// | "Artikel",, _ '// | "Auslaufartikel=True") '// ===================================================== On Error GoTo HandleErr ' Verweis auf ActiveX Data Object 2.X muss gesetzt sein! Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Dim sSql As String Dim vRet As Variant Dim sDomType As String 'Domänenaggregatfunktionen ermitteln Select Case peType Case dtAvg sDomType = "Avg" Case dtCount sDomType = "Count" Case dtFirst sDomType = "First" Case dtLast sDomType = "Last" Case dtMax sDomType = "Max" Case dtMin sDomType = "Min" Case dtLookup sDomType = vbNullString Case dtSdtev sDomType = "Sdtev" Case dtSum sDomType = "Sum" Case dtVar sDomType = "Var" End Select ' Rückgabewert initialisieren vRet = Null ' SQL-String zusammen schnipseln sSql = "SELECT " If Len(sDomType) > 0 Then sSql = sSql & sDomType End If sSql = sSql & "([" & psField & "]) AS SummaryValue " sSql = sSql & "FROM [" & psDomain & "]" ' Falls Kriterium angegeben, WHERE-Klausel erstellen If Len(psCriteria) > 0 Then sSql = sSql & "WHERE " & psCriteria End If sSql = sSql & ";" ' Datenbank öffnen If Len(psDbs) > 0 Then Set cnn = New ADODB.Connection cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & psDbs Else Set cnn = CurrentProject.Connection End If ' Recordset öffnen Set rst = New ADODB.Recordset rst.Open sSql, cnn, adOpenStatic ' Falls DS vorhanden, Wert übergeben If rst.RecordCount > 0 Then vRet = rst![SummaryValue] End If If Not IsNull(vRet) Then A2XADODomain = vRet End If HandleExit: On Error Resume Next If Not rst Is Nothing Then rst.Close: Set rst = Nothing If Not cnn Is Nothing Then cnn.Close: Set cnn = Nothing Exit Function HandleErr: Select Case Err.Number Case Else MsgBox "Fehler " & Err.Number & ": " & _ Err.Description, vbCritical, _ "basAdo.A2XADODomain" End Select Resume HandleExit End Function