Thema Datum  Von Nutzer Rating
Antwort
14.02.2012 14:43:42 Bexlight
NotSolved
Blau Schlechte Performance
15.02.2012 02:56:35 Till
Solved
15.02.2012 09:51:11 Gast14564
NotSolved
15.02.2012 12:20:16 Till
NotSolved

Ansicht des Beitrags:
Von:
Till
Datum:
15.02.2012 02:56:35
Views:
1031
Rating: Antwort:
 Nein
Thema:
Schlechte Performance

Hi,

du kannst mal folgendes versuchen:

Function fcDomWert(Expression As String, Domain As String, _
                   Optional Criteria As String, _
                   Optional ltDomArt As ltDomWert = ltDLookup) As Variant
    Dim strSQL  As String
    Dim rs      As DAO.Recordset
     
    rs.move 700000,1
    Select Case ltDomArt
      Case 0: strSQL$ = "SELECT " & Expression$ & " FROM " & Domain$
      Case 1: strSQL$ = "SELECT COUNT(*) 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
'    Debug.Print fcDomWert 'Nur zum Testen
    rs.Close
    Set rs = Nothing
End Function

Ich glaub aber eher nicht, dass es funktioniert, aber du kannst natürlich auch die Fälle "manuell" durchgehen:

Function fcDomWert(Col&, Table$, Criteria$, Optional ByVal start& = 700000) As Long
Dim rs      As DAO.Recordset
Dim i&

    Set rs = CurrentDb.OpenRecordset(Table, dbOpenForwardOnly)
    With rs
        .Move start, 1
        While Not rs.EOF
            
            If .fields(Col) = Criteria Then
                i = i + 1
            End If
            .movenext
            
        Wend
        .Close
    End With
    fcDomWert = i
    Set rs = Nothing
    
End Function

Das optionale Parameter "Start" gibt die erste Zeile an.

Da ich die Beispiele nicht getestet habe und mich nicht viel mit Access beschäftige, wird das vermutlich nicht auf anhieb klappen. Bin mir auch nicht sicher ob der "Move" Befehl so klappt. Kannst aber ja mal versuchen darauf aufzubauen...

 

Gruß

Till


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
14.02.2012 14:43:42 Bexlight
NotSolved
Blau Schlechte Performance
15.02.2012 02:56:35 Till
Solved
15.02.2012 09:51:11 Gast14564
NotSolved
15.02.2012 12:20:16 Till
NotSolved