Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenbankanbindung Access zu langsam

Forumthread: Datenbankanbindung Access zu langsam

Datenbankanbindung Access zu langsam
10.10.2019 11:05:33
Volker
Hallo Gemeinde,
ich habe einige Anwendungen in Excel 2010 geschrieben, die Daten per SQL in eine Access-Datenbank ablegen.
Als Provider nutze ich DAO.DBEngine.120. Die gleichen Dateien haben bei Verwendung ab Excel 2013 einen enormen Performance-Verlust. Dieser geht ganz klar auf den Datenzugriff zur Datenbank zurück. Wir sprechen hier von einem Laufzeitsprung von 3 Sekuden auf ca 2 Minuten!!
Den Ratschlag der Umprogrammierung hatte ich bereits bekommen. Diese Abläufe sind so komplex, dass ich mir diese Mühe nicht machen kann.
Gibt es möglicherweise für aktuelle Excelversionen einen anderen Provider?
Über Goolge bin ich leider nicht fündig geworden.
Über Ideen würde ich mich sehr Freuen.
Gruß Volker
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbankanbindung Access zu langsam
10.10.2019 18:41:42
Thomas
Hallo Volker,
ich bin kein Programmierer oder so. Was ich über so etwas weis habe ich zu 90 Prozent aus diesem Forum.
Jedoch ein paar Anmerkungen Erfahrungen.
Ich habe so etwas Excel Access Anbindung auch programmiert. Wobei das ehr passt wenn ich schreibe zusammengestückelt bis es lief.( Das hat Wochen gedauert) So sei es.
Ich habe diese Datei auf mehren verschiedenen Rechnern laufen lassen. Unter anderen auch Office 2013.
Und deshalb bin ich mir sicher das der Geschwindigkeitsverlust nicht an der DAO.DBEngine.120 liegt.
Bei mir war das richtig schnell und das trotz langsamen Netzwerks. Allerdings habe ich auch nur ein paar hundert Daten als Grundlage.
Deshalb vermute ich das Du an der falschen Stelle suchst. Die Schnittstelle ist jedenfalls richtig schnell ( unter Office 2013 ).
Anbei mal ei Codeauszug wie ich darauf zugreife.
' Wenn ein Fehler auftritt gehe zu der angegebenen Sprungmarke
On Error GoTo Fin
' Die Excelapplikation wird ruhig gestellt - UNBEDINGT wieder einschalten
With Application
' Das Bildschirmaktualisierung wird unterbrochen
.ScreenUpdating = False
' Ereignisroutinen werden deaktiviert
''.EnableEvents = False
' Auslesen der momentanen Einstellung für die Berechnung
'''lngCalc = '.Calculation
' Setzen der Berechnung auf "Manuell"
''.Calculation = xlCalculationManual
' Eingabeaufforderungen und Warnmeldungen unterdrücken
.DisplayAlerts = False
End With
' Hier öffne ich die Beispieldatenbank "Verwaltung.accdb"
' bzw. "Verwaltung.accdb"
If Val(Application.Version) >= 12 Then
' Pfad- und Dateiname gegebenenfalls anpassen
Set objDBank = CreateObject("DAO.DBEngine.120").OpenDatabase _
(ThisWorkbook.Path & Application.PathSeparator & "Verwaltung.accdb")
Else
' Pfad- und Dateiname gegebenenfalls anpassen
Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase _
(ThisWorkbook.Path & Application.PathSeparator & "Verwaltung.accdb")
End If
' Fülle die Objektvariable "objRSet" mit dem RecordSet
' erstellt aus der Auswahl-Abfrage "gk" ' id erkennung zum ändern des Datensatzes
Set objRSet = objDBank.OpenRecordset("Select * From TB_Fundsachen WHERE testnummer=" & id & ";") ' so heisst die abfrage
Wenn du Lust hast stellst du mal deine Datei mit Testdaten ein und ich lasse dies dann mal bei mir laufen. ( als zip denn ich brauch dann die Datenbankstrucktur )
Anschließend sage ich dir wie lange es gedauert hat.
Da ich dir nicht wirklich eine Lösung bieten kann lasse ich den Beitrag mal offen.
mfg thomas
Anzeige
ups Haken vergessen
10.10.2019 18:42:55
Thomas
.
AW: Datenbankanbindung Access zu langsam
10.10.2019 19:28:10
Volker
Hallo Thomas,
vielen Dank für deine Info.
Ich versuche das mal in meine Datei einzuarbeiten.
Es sind ja nur 20 oder 30 Datensätze in verschiedene Tabellen anzulegen.
Ich gebe dir schnellstmöglich ein Feedback.
Gruß Volker
;
Anzeige
Anzeige

Infobox / Tutorial

Optimierung der Datenbankanbindung in Excel


Schritt-für-Schritt-Anleitung

  1. Wähle den richtigen DAO Provider:

    • Für Excel-Versionen vor 2013 verwende DAO.DBEngine.36.
    • Ab Excel 2013 solltest du DAO.DBEngine.120 verwenden.
  2. Fehlerbehandlung in VBA einfügen:

    On Error GoTo Fin
  3. Excel Anwendung optimieren:

    With Application
       .ScreenUpdating = False
       .EnableEvents = False
       .Calculation = xlCalculationManual
       .DisplayAlerts = False
    End With
  4. Öffne die Access-Datenbank:

    If Val(Application.Version) >= 12 Then
       Set objDBank = CreateObject("DAO.DBEngine.120").OpenDatabase(ThisWorkbook.Path & Application.PathSeparator & "Verwaltung.accdb")
    Else
       Set objDBank = CreateObject("DAO.DBEngine.36").OpenDatabase(ThisWorkbook.Path & Application.PathSeparator & "Verwaltung.accdb")
    End If
  5. Fülle das Recordset:

    Set objRSet = objDBank.OpenRecordset("SELECT * FROM TB_Fundsachen WHERE testnummer=" & id & ";")

Häufige Fehler und Lösungen

  • Langsame Performance bei neueren Excel-Versionen:

    • Überprüfe, ob die Verwendung von DAO.DBEngine.120 korrekt implementiert ist. Oftmals kann ein Performanceverlust durch unsachgemäße Verbindungen oder Netzwerkanforderungen verursacht werden.
  • Fehlermeldungen beim Öffnen der Datenbank:

    • Stelle sicher, dass der Pfad zur Datenbank korrekt ist und die Datenbank nicht von einem anderen Prozess gesperrt wird.

Alternative Methoden

  • ODBC-Datenbankanbindung:

    • Anstelle von DAO kannst du ODBC verwenden, um auf Access-Datenbanken zuzugreifen. Dies könnte in einigen Fällen die Performance verbessern.
  • Verwendung von ADO:

    • ADO bietet eine andere Möglichkeit, Daten aus Access zu ziehen und kann in bestimmten Szenarien schneller sein.

Praktische Beispiele

Ein Beispiel zur Verwendung von DAO.DBEngine.120 in Verbindung mit einer Access-Datenbank könnte folgendermaßen aussehen:

Sub DatenbankAbrufen()
    Dim objDBank As Object
    Dim objRSet As Object
    Dim id As Integer

    id = 1 ' Beispiel ID
    Set objDBank = CreateObject("DAO.DBEngine.120").OpenDatabase("C:\Pfad\Zur\Datenbank.accdb")
    Set objRSet = objDBank.OpenRecordset("SELECT * FROM TB_Fundsachen WHERE testnummer=" & id & ";")

    ' Daten verarbeiten...

    objRSet.Close
    objDBank.Close
End Sub

Tipps für Profis

  • Datenbank-Optimierung:

    • Achte darauf, dass die Access-Datenbank gut strukturiert ist. Indizes auf häufig abgefragten Feldern können die Geschwindigkeit erheblich steigern.
  • Batch-Verarbeitung:

    • Wenn möglich, verarbeite Daten in Batches anstatt Einzelabfragen, um die Gesamtzeit zu reduzieren.

FAQ: Häufige Fragen

1. Warum ist die Performance bei Excel 2013 schlechter? Die Performance kann durch Änderungen in der Art und Weise, wie Excel mit Datenbanken kommuniziert, beeinflusst werden. Vergewissere dich, dass du den richtigen DAO Provider verwendest.

2. Was kann ich tun, wenn ich weiterhin Performance-Probleme habe? Neben der Verwendung des richtigen Providers solltest du auch die Struktur der Access-Datenbank überprüfen und eventuell auf ODBC oder ADO umsteigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige