Einführung "VBA mit Microsoft Office"

Code Snippet "VBA Access"

Geschwindigkeit von Abfragen (Queries) messen

'Misst die Performance-Zeit in Sekunden (auch Bruchteile)
'muss initialisiert werden
'wenn blnRunden = true, dann wird auf bytAnzStellen gerundet,
'sonst keine Rundung
'Defaultwerte:
' - blnRunden: false
' - bytAnzStellen: 0
Function funAnzVergangeneSekunden(Optional ByVal blnRunden As Boolean, _
  Optional ByVal bytAnzStellen As Byte)
  Static sngVorher As Single
  Dim sngAktuell As Single
  Dim sngDifferenz As Single
  
  sngAktuell = Timer
  
  If sngVorher > 0 Then
    sngDifferenz = sngAktuell - sngVorher
  Else
    sngDifferenz = 0
  End If
  
  sngVorher = sngAktuell
  If blnRunden Then
    funAnzVergangeneSekunden = Round(sngDifferenz, bytAnzStellen)
  Else
    funAnzVergangeneSekunden = sngDifferenz
  End If
End Function

Sub testQueryPerformance()
  Const strQuery As String = "qry_codeexamples"
  Dim arrAnz(3) As Single
  Dim intCounter As Integer
  Dim sngSumme As Single
  Dim sngMittelwert As Single
  
  'Call procZeitMessung("vor Query " & strQuery)
  For intCounter = 0 To UBound(arrAnz) - 1
    funAnzVergangeneSekunden
    Call DoCmd.OpenQuery(strQuery, acViewNormal, acReadOnly)
    arrAnz(intCounter) = funAnzVergangeneSekunden
    Debug.Print intCounter & " " & arrAnz(intCounter)
    sngSumme = sngSumme + arrAnz(intCounter)
    Call DoCmd.Close(acQuery, strQuery)
  Next
  
  sngMittelwert = Round(sngSumme / (UBound(arrAnz)), 3)
  
  Debug.Print "Ausführungszeit für " & strQuery & " " & sngMittelwert
End Sub