Hier drei Tipps, um den Zugriff auf MS Access-Datenbanken, die auf Netzlaufwerken (Shares) liegen, zu beschleunigen:
Bei Zugriffen auf Datenbanken im Netz, z. B. bei der Tabelleneinbindung mit
Inwiefern diese Tipps helfen, muss man jeweils im konkreten Fall testen.
#msaccess
Tipp1: Kurze Dateinamen (8.3-DOS-Format) verwenden
Lange Dateinamen/Pfadnamen im Netz werden ab Windows XP aufwärts wohl nicht gecached, die kurzen Dateinamen (8.3-DOS-Format) schon. Dies kann sich stark bremsend auswirken. Abhilfe kann man hier durch die Verwendung der kurzen Dateinamen schaffen. Die Abbildung eines langen auf einen kurzen Pfadnamen lässt sich über einen Windows-API-Call bewerkstelligen, der von einer Konvertier-Funktion aufgerufen wird:Declare Function GetShortPathName Lib "kernel32" _ Alias "GetShortPathNameA" (ByVal lpszLongPath As String, _ ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Function GetShortName(ByVal sLongFileName As String) As String
'Puffer für API-Rückgabewert
Dim lRetVal As Long
dim sShortPathName As String
Dim iLen As Integer
sShortPathName = Space(255)
iLen = Len(sShortPathName) 'Windows-API-Call
lRetVal = GetShortPathName(sLongFileName, sShortPathName, iLen)
'Führende Leerzeichen entfernen
GetShortName = Left(sShortPathName, lRetVal)
End Function
Bei Zugriffen auf Datenbanken im Netz, z. B. bei der Tabelleneinbindung mit
DoCmd.TransferDatabase
, übergibt man dann den Pfad zur Datenbank als GetShortName([Pfad])
.Tipp2: Permanent ein Recordset zur Datenbank im Netz offen halten
- Man definiert eine Public-Variable als DAO-Datenbank-Objekt (z. B.
Public AlwaysOpenDBConnection AS DAO.Database
) - Bei der ersten Gelegenheit, nachdem die Datenbank im Netz eingebunden wurde, baut man eine Verbindung auf (Set AlwaysOpenDBConnection = OpenDatabase(Datenbankpfad$, False) )
- Bei Programmende gibt man die Verbindung wieder frei (Set AlwaysOpenDBConnection = Nothing)
Der letzte Schritt scheint eigentlich unsinnig, da man erwartet, dass Access beim Beenden allen allozierten Speicher wieder frei gibt, doch dem scheint nicht so zu sein.
Tipp3: Änderungen in Blöcken schreiben lassen
Wenn viele Änderungen “am Stück” in eine Datenbank geschrieben werden sollen, kann man einen Transaktions-Block definieren. Die einzelnen Schreibanweisungen werden dann von der Jet-Engine gesammelt und gemeinsam ausgeführt. Dies beschleunigt den Zugriff. Beispiel:BeginTrans For i=1 to 1000
odb.Execute "INSERT INTO Zahlenliste VALUES('" & i & "')"
EndTrans
Inwiefern diese Tipps helfen, muss man jeweils im konkreten Fall testen.
#msaccess
Kommentare
Kommentar veröffentlichen