Hallo,
ich habe mit Access 2010 und VBA eine Auswertung einer Datenbank ertellt.
Mit Access wurden etwa 10 Datensätze pro Sekunde verarbeitet.
Mit dem Umstieg auf Access 2016 praucht ein Datensatz etwa 2 Sekunden.
Warum gibt es diesen Unterschied mit Fakator 20?
(Zur Optimierung könnte ich die Bildschirmausgabe unterdrücken. Anderseits will ich Bildschirmausgaben.)
Insgesamt sind rund 26.000 Datensätze zu bearbeiten.
Gibt es Anweisungen, die in Access 2016 nicht mehr verwendet werden sollen?
Ich gebe den Quellcode mal mit an:
Ich hole mir Personalstammdaten und anschließend zu dieser Person weitere Informationen. Die Verbindung ist die Peronalnummer, die als Parameter übergeben wird.
Option Compare Database
Option Explicit
Sub Personal_aus_Hal_bearbeiten()
Dim db As DAO.Database
Dim qdf_HAL As DAO.QueryDef
Dim qdf_Abg As DAO.QueryDef
Dim qdf_Zug As DAO.QueryDef
Dim qdf_ATZ As DAO.QueryDef
Dim rs_HAL As DAO.Recordset
Dim rs_LSA As DAO.Recordset
Dim rs_abg As DAO.Recordset
Dim rs_zug As DAO.Recordset
Dim rs_atz As DAO.Recordset
Dim anzahl_Personal
Dim zaehler
Dim VergleichsPnr As DAO.Parameter
Dim VergPnr As DAO.Parameter
Set db = CurrentDb
Set qdf_HAL = db.QueryDefs("Halle_Personal")
Set rs_HAL = qdf_HAL.OpenRecordset
Set rs_LSA = db.OpenRecordset("Personal_LSA", dbOpenDynaset)
rs_HAL.MoveLast
anzahl_Personal = rs_HAL.RecordCount
zaehler = 0
rs_HAL.MoveFirst
Do While Not rs_HAL.EOF And Not rs_HAL.BOF
rs_LSA.AddNew
rs_LSA!pnr = rs_HAL!pnr
rs_LSA!pnr_LSD = rs_HAL!pnr_LSD
rs_LSA!name = rs_HAL!name
rs_LSA!vorname = rs_HAL!vorname
rs_LSA!titel = rs_HAL!titel
rs_LSA!gebdat = rs_HAL!gebdat
rs_LSA!geschl = rs_HAL!geschlecht
rs_LSA!behind = rs_HAL!behind
rs_LSA!Status = rs_HAL!Status
rs_LSA!vws = rs_HAL!vws
rs_LSA!rws = rs_HAL!rws
rs_LSA!stammschule = rs_HAL!stammschule
rs_LSA!stammschultyp = rs_HAL!stammschultyp
rs_LSA!typstammschule = rs_HAL!typstammschule
rs_LSA!kapitel = rs_HAL!kapitel
rs_LSA!lkstammschule = rs_HAL!lkstammschule
rs_LSA!rv = rs_HAL!rv
rs_LSA!rv_gruppe = rs_HAL!rv_gruppe
rs_LSA!vg = rs_HAL!vg
rs_LSA!db = rs_HAL!db
rs_LSA!adb = rs_HAL!adb
rs_LSA!amt = rs_HAL!amt
rs_LSA!Quelle = rs_HAL!Quelle
rs_LSA!statusdatum = rs_HAL!statdat
Set qdf_Abg = db.QueryDefs("Halle_Abgänge")
Set VergleichsPnr = qdf_Abg.Parameters("Vgl_Pnr")
VergleichsPnr.Value = rs_HAL!pnr
Set rs_abg = qdf_Abg.OpenRecordset
If Not rs_abg.EOF Or Not rs_abg.BOF Then
rs_abg.MoveLast
rs_LSA!anzahlAbgänge = rs_abg.RecordCount
rs_abg.MoveFirst
rs_LSA!abg = rs_abg!abg
rs_LSA!abgdat = rs_abg!abgdat
rs_LSA!ABGNr = rs_abg!vorart
If rs_abg!vorart = "60" Then
'Altersteilzeit
rs_LSA!atz_frist_aus50 = rs_abg!atz_frist_50
Set qdf_ATZ = db.QueryDefs("Halle_Teilzeit")
Set VergPnr = qdf_ATZ.Parameters("Vgl_Pnr")
VergPnr.Value = rs_HAL!pnr
Set rs_atz = qdf_ATZ.OpenRecordset
If Not rs_atz.EOF Or Not rs_atz.BOF Then
rs_atz.MoveFirst
rs_LSA!atz_art = rs_atz!bezeichnung
rs_LSA!ATZ_Beg_aus30 = rs_atz!Beginn
rs_LSA!ATZ_Frist_aus30 = rs_atz!frist
rs_LSA!ATZ_druck_aus30 = rs_atz!druck
End If
End If
End If
Set qdf_Zug = db.QueryDefs("Halle_Zugänge")
Set VergleichsPnr = qdf_Zug.Parameters("Vgl_Pnr")
VergleichsPnr.Value = rs_HAL!pnr
Set rs_zug = qdf_Zug.OpenRecordset
If Not rs_zug.EOF Or Not rs_zug.BOF Then
rs_zug.MoveLast
rs_LSA!anzahlZugänge = rs_zug.RecordCount
rs_zug.MoveFirst
rs_LSA!Zugangsgrund = rs_zug!ZugGrund
rs_LSA!letzterZugang = rs_zug!Beginn
End If
Set qdf_Zug = db.QueryDefs("Halle_Zugänge_befristet")
Set VergleichsPnr = qdf_Zug.Parameters("Vgl_Pnr")
VergleichsPnr.Value = rs_HAL!pnr
Set rs_zug = qdf_Zug.OpenRecordset
If Not rs_zug.EOF Or Not rs_zug.BOF Then
rs_zug.MoveLast
rs_LSA!AnzahlBefristete = rs_zug.RecordCount
rs_zug.MoveFirst
'rs_LSA!Zugangsgrund = rs_zug!ZugGrund
rs_LSA!letzteBefristung_Beginn = rs_zug!Beginn
rs_LSA!letzteBefristung_Ende = rs_zug!frist
rs_LSA!letzteBefristung_Grund = rs_zug!ZugGrund
End If
Set qdf_Zug = db.QueryDefs("Halle_Überführung_EP13")
Set VergleichsPnr = qdf_Zug.Parameters("Vgl_Pnr")
VergleichsPnr.Value = rs_HAL!pnr
Set rs_zug = qdf_Zug.OpenRecordset
If Not rs_zug.EOF Or Not rs_zug.BOF Then
rs_zug.MoveFirst
rs_LSA!UeberführungEp13 = rs_zug!UeberfuehrungEpl13
End If
zaehler = zaehler + 1
If zaehler Mod 20 = 0 Then
StatusBar ("Datensatz " & zaehler & " von " & anzahl_Personal & " aus Halle")
End If
rs_LSA.Update
rs_HAL.MoveNext
Loop
Set VergleichsPnr = Nothing
Set VergPnr = Nothing
Set rs_abg = Nothing
Set rs_zug = Nothing
Set rs_HAL = Nothing
Set rs_atz = Nothing
Set qdf_Abg = Nothing
Set qdf_Zug = Nothing
Set qdf_ATZ = Nothing
Set db = Nothing
End Sub
|