Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1660to1664
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Die Methode DBEngine für das Objekt...

Die Methode DBEngine für das Objekt...
29.11.2018 09:58:27
Jonas
Hallo ich bekomme beim ausführen eines meiner Subs folgende Fehlermeldung:
Die Methode DBEngine für das Objekt _application ist fehlgeschlagen.
Mit den Sub importiere ich Abfragen aus meiner Access Datenbank (accdb) in Excel (xlsb), um sie dort _
weiter zu bearbeiten. Die Exceltabelle und das Backend meiner Datenbank liegen beide auf unserem Netzlaufwerk. Es gibt zwei unterschiedliche Varianten darauf zuzugreifen. Entweder lokal über den eigenen Computer, oder über eine Remoteverbindung die sich auf den Server aufschaltet. Bei der ersten Variante funktioniert der Code hervorragend, lediglich über die Remoteverbindung erscheint die genannte Fehlermeldung, obwohl man auf dieselben Dateien zugreift. Auch die Officeversion ist bei beiden Varianten gleich. Ich kann mir den Fehler einfach nicht erklären.
Hier das erwähnte Sub:

Sub DatenImport()
Dim wksRohdaten As Worksheet, wksRohdatenSheet, wksQualificationLevel As Worksheet,  _
wksCrossQualification As Worksheet
Dim appAccess   As Object
Dim accDB       As Object
Dim accRst      As Object
Dim accRst2     As Object
Dim accRst3     As Object
Dim accRst4     As Object
Dim accRst5     As Object
Dim accRst6     As Object
Dim accRst7     As Object
Dim strConnect  As String
Set wksRohdaten = Sheets("Rohdaten")
Set wksQualificationLevel = Sheets("QualificationLevelXWB")
Set wksCrossQualification = Sheets("CrossQualification")
Set wksRohdatenSheet = Sheets("RohdatenSheet")
Const DB_NAME As String = "P:\500_Production\Production_Capacity\Datenbank\ _
Stammdatenbank_be.accdb" 'Datenbank
Const PASSWORT As String = "******"       'Passwort
'Connect String
strConnect = "ms access;pwd=" & PASSWORT & ";database=" & DB_NAME
'neues Access Object
Set appAccess = CreateObject("Access.Application")
'Datenbank öffnen
Set accDB = appAccess.DBEngine(0).OpenDatabase( _
DB_NAME, _
Options:=False, _
ReadOnly:=True, _
Connect:=strConnect)
'neues Recordset
Set accRst = accDB.OpenRecordset("qryCompetenceGridXWB")
Set accRst2 = accDB.OpenRecordset("qryCompetenceQualificationOSXWB")
Set accRst3 = accDB.OpenRecordset("qryCompetenceQualificationSpecificXWB")
Set accRst4 = accDB.OpenRecordset("qryCompetenceQualificationOSSA")
Set accRst5 = accDB.OpenRecordset("qryCompetenceQualificationOSLRFWD")
Set accRst6 = accDB.OpenRecordset("qryCompetenceQualificationOSLRAFT")
Set accRst7 = accDB.OpenRecordset("qryCompetenceGridSheetXWB")
'Inhalt Tabellenblätter Rohdaten löschen um Alteinträge zu entfernen
wksRohdaten.Range("A2:N100000").ClearContents
wksQualificationLevel.Range("A2:D100000").ClearContents
wksCrossQualification.Range("A2:F100000").ClearContents
wksRohdatenSheet.Range("A2:C100000").ClearContents
'Daten ausgeben
wksRohdaten.Range("A2").CopyFromRecordset accRst
wksQualificationLevel.Range("A2").CopyFromRecordset accRst2
wksQualificationLevel.Range("C2").CopyFromRecordset accRst3
wksCrossQualification.Range("A2").CopyFromRecordset accRst4
wksCrossQualification.Range("C2").CopyFromRecordset accRst5
wksCrossQualification.Range("E2").CopyFromRecordset accRst6
wksRohdatenSheet.Range("A2").CopyFromRecordset accRst7
accRst.Close
accRst2.Close
accRst3.Close
accRst4.Close
accRst5.Close
accRst6.Close
accRst7.Close
accDB.Close
Set accDB = Nothing
Set accRst = Nothing
Set accRst2 = Nothing
Set accRst3 = Nothing
Set accRst4 = Nothing
Set accRst5 = Nothing
Set accRst6 = Nothing
Set accRst7 = Nothing
'Pivot aktualisieren
For Each wks In Worksheets
For Each pt In wks.PivotTables
pt.PivotCache.Refresh
Next
Next
End Sub
Hat einer von euch eventuell eine Erklärung dafür? Leider ist die Funktion über die Remote für die spätere Arbeitsweise der DB essentiell, da viele Mitarbeiter ausschließlich über die Remote arbeiten und auf ihren eigenen Computern gar kein Office installiert ist.
Liebe Grüße und vielen Dank
Jonas

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Die Methode DBEngine für das Objekt...
30.11.2018 00:35:46
Luschi
Hallo Jonas,
ich kann mir nicht vorstellen, das dieses Prozedur schon mal so funktioniert hat, denn der Verbindungsstring (Connect String) muß ganz anders aussehen; und wie, kannst Du hier nachlesen:
https://www.connectionstrings.com/access/
Bei mir klappen mit ADODB beide Varianten:
- Microsoft Jet OLE DB 4.0
- Microsoft ACE OLEDB 12.0
Gruß von Luschi
aus klein-Paris
-
AW: Die Methode DBEngine für das Objekt...
30.11.2018 09:27:01
Jonas
Hallo Luschi, erstmal vielen Dank für die Antwort. So ganz sehe ich da aber noch nicht durch. _ Es wäre super lieb wenn du mir ein bisschen auf die Sprünge helfen könntest. Wenn ich das richtig verstanden habe, brauche ich die Microsoft Access Database Engine 2010, da ich ein 64bit System nutze. Des Weiteren habe ich Microsoft ActiveX Data Objects 2.8 Library Objektbibliothek aktiviert, allerdings wird der von der Website stammende Code

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;
Jet OLEDB:Database Password=MyDbPassword;
noch nicht erkannt. Sorry ich glaube ich habe das noch nicht so ganz verstanden :/
Liebe Grüße
Jonas
Anzeige
AW: Die Methode DBEngine für das Objekt...
02.12.2018 06:56:31
Luschi
Hallo Jonas,
stelle ein kleines praktisches Beispiel bereit, damit man Dir helfen kann.
Beim gesetztem Verweis 'Microsoft ActiveX Data Objects 2.8 Library' spricht man von 'Early Binding'. Hierbei kommt es manchmal dann zu Problemchen, wenn die User mit unterschiedlichsten Programmversionen unterwegs sind. Deshalb sind diese Verbindungsstrings besonders wertvoll, da man hier die Methode 'Late Binding' benutzt und so dem o.g. Problemchen aus dem wege geht.
Schmeiß die feste Verdrahtung zu ADO Version 2.8 raus und stürze Dich auf 'Late Binding'. Das Betriebssystem sorgt dann dafür, daß immer die aktuellste Version von AOO zum Einsatz kommt.
ADO ist datenbanktechnisch empfindlicher als die externe Verweise in Excel-Formeln und da können schon kleinste Schreibfehler zu Fehlern kommen bzw. die Datenrückgabe ist blockiert.
Deshalb ist das praktische Beispiel immer einer theoretischen Diskussion vorzuziehen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Die Methode DBEngine für das Objekt...
04.12.2018 17:41:06
Jonas
Hey Luschi, also ich habe es jetzt mit deinem Ansatz wie folgt gelöst und es funktioniert für den Moment tadellos:

Sub DatenImport()
Dim wksAuswertung As Worksheet
Dim pt As PivotTable
Dim wks As Worksheet
Dim con As ADODB.Connection
Set con = New ADODB.Connection
Dim rs1 As ADODB.Recordset
Set wksAuswertung = Sheets("Auswertung")
With con
.Provider = "Microsoft.ACE.OLEDB.12.0;Data Source=P:\500_Production\Production_Capacity\ _
Datenbank\Stammdatenbank_Frontend_Views.accdb; Mode=Share Deny None;"
.Properties("Jet OLEDB:Database Password") = "*****"
.Open
End With
'neues Recordset
Set rs1 = con.Execute("qryToolsLostAndOutOfServiceStatistic")
'Daten ausgeben
wksAuswertung.Range("B3").CopyFromRecordset rs1
rs1.Close
con.Close
Set rs1 = Nothing
Set con = Nothing
'Pivot aktualisieren
For Each wks In Worksheets
For Each pt In wks.PivotTables
pt.PivotCache.Refresh
Next
Next
End Sub
Für wie sicher hältst du diese Lösung?
liebe Grüße
Jonas
Anzeige
AW: Die Methode DBEngine für das Objekt...
30.11.2018 11:23:15
Jonas
Hey Luschi! Ich habe jetzt einmal bisschem rumprobiert, aber jetzt hänge ich wirklich fest..
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=P:\500_Production\ _
Production_Capacity\Datenbank\Stammdatenbank_be_test.accdb;Mode=Share Deny None;"
'Jet OLEDB: Database Password = "*****"
con.Open
Soweit bin ich bis jetzt gekommen. Das mit dem Passwort will noch nicht so recht funktionieren, weswegen ich es vorläufig erstmal aus der Datenbank entfernt habe. Das darf jedoch nicht so bleiben. Des Weiteren besteht noch die Frage wie ich meine erstellten Abfragen in meine Tabellenblätter bekomme?
Vielen Dank
Jonas
Anzeige
AW: Die Methode DBEngine für das Objekt...
30.11.2018 16:05:44
Jonas
Hey Luschi, hat sich alles geklärt und funktioniert jetzt wunderbar! Vielen Dank! Du hast mir mein Wochenende gerettet :)
Liebe Grüße
Jonas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige