Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Von einer Datenbank aus eine andere Datenbank öffnen
zurück: SendObject mit Lotus Notes / Feld "Antwort an" weiter: If-Bedingung wird nicht erfüllt Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Offen Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Mika___
Gast


Verfasst am:
09. März 2014, 19:27
Rufname:

Von einer Datenbank aus eine andere Datenbank öffnen - Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,

seit Stunden verzweifle ich an einem scheinbar einfachen Problem. Ich habe eine Datenbank geöffnet, nennen wir sie A.mdb. Nun möchte ich eine zweite Datenbank (B.mdb) von A.mdb aus öffnen, wobei B.mdb passwortgeschützt ist.
Mit
Code:
Public Function test_get()
    Dim app As Access.Application
    Dim strDbName As String
   
    strDbName = CurrentProject.Path & "\B.mdb"
    Set app = GetObject(, "Access.Application")
    app.OpenCurrentDatabase strDbName, False, "nwind"
    Set app = Nothing
End Function
erhalte ich
Zitat:
Laufzeitfehler 7867 – Die Datenbank ist bereits geöffnet
Verwende ich statt GetObject nun CreateObject funktioniert es erst einmal:
Code:
Public Function test_create()
    Dim app As Access.Application
    Dim strDbName As String
   
    strDbName = CurrentProject.Path & "\B.mdb"
    Set app = CreateObject("Access.Application")
    app.OpenCurrentDatabase strDbName, False, "nwind"
    app.Visible = True
    'Set app = Nothing
End Function
Doch sobald die Prozedur beendet ist, verschwindet die B.mdb.

Static- oder Global-Deklarationen
Öffnen einer kennwortgeschützten Datenbank durch Automatisierung in Access 2000
Passwortgeschützte Datenbank öffnen/komprimieren
bringen leider nichts, da beim Schließen von A.mdb auch hier die B.mdb verschwindet.

In Excel kann man doch auch andere Workbooks öffnen, was mache ich hier falsch?

Gruß Mika
MiLie
kein Office- VBA- Programmierer


Verfasst am:
09. März 2014, 19:40
Rufname: Micha
Wohnort: Chemnitz


AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,

versuche es mal mit
Code:
    '...
    FollowHyperlink strDbName
    '...
wenn du die Datenbank einfach nur starten willst.
_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
SGast
Gast


Verfasst am:
09. März 2014, 22:12
Rufname:

AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,
brauchst du beide Datenbanken gleichzeitig oder reicht es wenn du B von A aus öffnest und damit A beendest?

Was steckt hinter deinem "Ansinnen"? Kannst du nicht die Funktionen aus B in A einbinden bzw. umgekehrt.

Btw: Du bist dir bewusst, das dein Code nur mit der Vollversion funktioniert!?

@Milie:
Problem hier ist das DB kennwortgeschützt ist.

Gruß Steffen
MiLie
kein Office- VBA- Programmierer


Verfasst am:
09. März 2014, 22:33
Rufname: Micha
Wohnort: Chemnitz

AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,

dann deklariere den Verweis in einem Modul global, dann bleibt die DB offen so lange die eigene offen ist
Code:
Public app As Access.Application
sorry, habe derade gelesen, dass sie länger offen bleiben soll.
_________________
Viele Grüße

Micha

Schreibfehler die Ihr findet, könnt Ihr behalten
Mika___
Gast


Verfasst am:
14. März 2014, 18:27
Rufname:


AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,

das Ausgangsproblem konnte ich mittlerweile lösen. GetObject holt immer die erste Instanz, d.h. hier die Application der A.mdb. Das muss natürlich zum Fehler führen, wenn ich darin OpenCurrentDatabase (...) versuche.

Doch es gibt leider gleich ein neues Problem SadSadSadSadSad

Steffen hatte hier Shift-Taste beim Start sperren
empfohlen, doch noch eine .mdw zu verwenden.

Aber wie öffne ich denn eine mdb mit Datenbankpasswort UND .mdw mit VBA?

Nur .mdw ist kein Problem.
Nur Datenbankpasswort auch nicht. Hier z.B. aus Excel heraus:
Code:
Private Sub Workbook_Open()
    Call OpenPasswordProtectedDB
End Sub

Sub OpenPasswordProtectedDB()
    Dim appAcc As Access.Application                      'Verweis: "Microsoft Access 11.0 Object Library"
    Dim strDbName As String

    strDbName = ThisWorkbook.Path & "\geschützt.mdb"
    Call Shell("msaccess", vbMaximizedFocus)              'mit CreateObject(...) schließt Access gleich wieder
    Set appAcc = GetObject(, "Access.Application")
    appAcc.OpenCurrentDatabase strDbName, False, "nwind"
    Set appAcc = Nothing
    Application.Quit
    ThisWorkbook.Close SaveChanges:=False
End Sub
Zugreifen auf die Daten bei .mdw und gleichzeitigem Datenbankpasswort geht auch:
Code:
Sub ExternerZugriff(pPathDB As String, pPasswordDB, pPathMDW As String _
                  , pUser As String, pPassword As String)
    Dim DBE As DAO.DBEngine
    Dim WS As DAO.Workspace
    Dim DB As DAO.Database
    Dim rs As DAO.Recordset

    Set DBE = DBEngine
    DBE.SystemDB = pPathMDW                                                 'DBEngine mitteilen, wo die System.mdw liegt
    Set WS = DBE.CreateWorkspace("MyWs", pUser, pPassword, dbUseJet)        'Workspace "MyWs" für User pUser und pPassword erzeugen
    Set DB = WS.OpenDatabase(pPathDB, False, False, ";PWD=" & pPasswordDB)  'und dann die DB öffnen
    Set rs = DB.OpenRecordset("TBL_LC")
    If Not rs.EOF Then
         rs.MoveFirst
         Debug.Print rs!LName
    End If
    Set rs = Nothing
    Set DB = Nothing
    Set WS = Nothing
    Set DBE = Nothing
End Sub
Nur geöffnet bekomme ich die B.mdb damit nicht. Hat jemand noch eine Idee dazu?

Danke und Viele Grüße Mika
SGast
Gast


Verfasst am:
14. März 2014, 19:19
Rufname:

AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,
du hast doch schon alles, wo ist das Problem Wink.
Code:
    Call Shell("msaccess " & " /wrkgrp """ & pPathMDW & """ /user " & pUser _
             & " /pwd " & pPassword, vbNormalFocus)
    Set appAcc = GetObject(, "Access.Application")
    appAcc.OpenCurrentDatabase strDbName, False, "nwind"
    Set appAcc = Nothing
... zur Sicherheit nochmal der Hinweis:
Wenn du die Runtime-Version einsetzt funktioniert dein Code nicht Exclamation

Btw:
Shell() läuft parallel zu VBA. Es kann also mMn passieren, dass dein Getobject ins Leere läuft, weil Access noch nicht da ist.
Wenn du statt der "Startexcel" eine "Start-MDE" nutzt ist es vermutlich sicherer und du kannst mMn auf Getobject verzichten.

Gruß Steffen
Mika___
Gast


Verfasst am:
07. Apr 2014, 12:26
Rufname:

AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Mika___ am 14. März 2014 um 20:10 hat folgendes geschrieben:
Hallo Steffen,

ich weiß nicht, wie ich Dir danken soll!!!!
Was ich heute schon alles diesbezüglich ausprobiert habe. Unglaublich. Man sieht eben manchmal den Wald vor lauter Bäumen nicht mehr. Erst einmal eine Application ohne die DB mit der mdw öffnen. Dann erst die DB öffnen. Das wars. DANKE.

Wünsche allen hier ein schönes Wochenende

Gruß Mika

Hi,

leider zu früh gefreut, wie das eben so ist. In der ersten Euphorie, dass es auch mit mdw läuft hatte ich übersehen, dass ich die DB mit der .mdw von Access aus öffnen muss. Das wird mit Call Shell dann natürlich auf Grund der GetObject-Problematik schwierig.

Es gelingt mir einfach nicht, eine DB mit mdw automatisiert ohne Call Shell zu öffnen. Ich hatte es z.B. so versucht:
Code:
Sub DB_mit_mdw_öffnen(pPathDB As String, pPathMDW As String _
                    , pUserMDW As String, pPasswordMDW As String)
    Dim accApp As Access.Application, DBE As DAO.DBEngine
    Dim WS As DAO.Workspace, DB As DAO.Database, rs As DAO.Recordset
   
    Set accApp = New Access.Application
    Set DBE = accApp.DBEngine   '###### -2147221163 - Die Methode 'DBEngine' für das Objekt '_Application' ist fehlgeschlagen ######
    DBE.SystemDB = pPathMDW
    Set WS = DBE.CreateWorkspace("MyWs", pUserMDW, pPasswordMDW, dbUseJet)
    Set DB = WS.OpenDatabase(pPathDB)
    '...
    Set DB = Nothing
    Set WS = Nothing
    Set DBE = Nothing
    Set accApp = Nothing
End Sub
Ohne das Zuweisen von accApp funktioniert dieser Code einwandfrei. Nur ich bräuchte eben eine geöffnete Access-Datenbank.

Als Alternative hatte ich mir mittlerweile folgendes überlegt. Die Datenbank, von der aus die zweite DB mit der mdw gestartet werden soll, könnte ruhig geschlossen werden. Kann man irgendwie mit VBA in der Application der ersten Datenbank die zweite öffnen und dann die erste DB schließen?

Ich hätte mir nie vorstellen können, dass das Öffnen einer Datenbank einmal so schwierig sein könnte. Wäre Euch für jeden Tipp wirklich sehr dankbar,

Gruß Mika
SGast
Gast


Verfasst am:
08. Apr 2014, 18:20
Rufname:

AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,
Zitat:
Das wird mit Call Shell dann natürlich auf Grund der GetObject-Problematik schwierig.
Ohne es getestet zu haben, nutze doch GetObject mit der DB als ersten Parameter.

Gruß Steffen
Mika___
Gast


Verfasst am:
09. Apr 2014, 14:03
Rufname:

AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hi,

Dein Vorschlag hat mich wieder etwas weiter gebracht, doch es funktioniert leider immer noch nicht. Der Laufzeitfehler -2147221163 ist aber schon einmal weg.
Beim Arbeiten mit GetObject muss nur die erste DB (mit der dann die zweite aufgerufen werden soll) mit der gleichen .mdw gestartet sein. .SystemDB lässt sich noch nachträglich setzen, bewirkt aber nichts. Alles kein Problem. Auch der zweite Workspace mit der zweiten DB lässt sich öffnen:
Code:
Sub DB_mit_mdw_öffnen(pPathDB As String, pUserMDW As String _
                    , pPasswordMDW As String)
    Dim accApp As Access.Application, DBE As DAO.DBEngine
    Dim ws As DAO.Workspace, db As DAO.Database
   
    Set accApp = GetObject(CurrentProject.Path & "\starter.mdb")
    Set DBE = accApp.DBEngine
    Set ws = DBE.CreateWorkspace("MyWs", pUserMDW, pPasswordMDW, dbUseJet)
    Set db = ws.OpenDatabase(pPathDB)
    Workspaces.Append ws
Debug.Print Workspaces.Count
    Workspaces(0).Close                 '#### verändert nichts
Debug.Print Workspaces.Count
    '...
    Set db = Nothing
    Set ws = Nothing
    Set DBE = Nothing
    Set accApp = Nothing
End Sub
ABER: Wie schließe ich jetzt die starter.mdb, d.h., (<tt>Workspaces(0).Databases(0)</tt>, und setze stattdessen <tt>ws.Databases(0)</tt> ?

Gruß Mika
Gast



Verfasst am:
09. Apr 2014, 20:55
Rufname:

AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Hallo,
also ich meinte eigentlich Shell+GetObject().

Gruß Steffen
Mika___
Gast


Verfasst am:
16. Apr 2014, 19:06
Rufname:


AW: Von einer Datenbank aus eine andere Datenbank öffnen - AW: Von einer Datenbank aus eine andere Datenbank öffnen

Nach oben
       Version: Office 2007

Mika___ am 10. Apr 2014 um 16:53 hat folgendes geschrieben:
Hallo Steffen,

im Augenblick fällt mir nichts mehr ein, wie ich das Öffnen einer DB mit mdw und DB-Passwort ohne eine dritte DB lösen soll.

Ansatz 1 – Austausch der DB innerhalb der gleichen Application
Das was in Excel so leicht aus Mappe1.xls heraus geht (nicht einmal Makro-Sicherheits-Frage)
Code:
Sub test()
    WorkBooks.Open ThisWorkbook.Path & "\Mappe2.xls"
    ThisWorkbook.Close SaveChanges:=False
End Sub
benötigt offensichtlich in Access eine zweite Application, die das Schließen der starter.mdb und das Öffnen der DB mit mdw und DB-Passwort innerhalb der ersten Application regelt. Die Steuerung aus der zweiten Application heraus erfordert dann eine 3.DB.

Ansatz 2 – DB in neuer Application starten
Sofern keine Access-Instanz geöffnet ist kann man eine leere Application mit den Startparametern öffnen (s. Dein Vorschlag weiter oben) und dann mit OpenCurrentDatabase die DB mit dem DB-Passwort in der neuen Instanz öffnen. Da die DB mit mdw und DB-Passwort aber aus Access heraus geöffnet wird, würde ich mit GetObject die erste Instanz (die Application der Starter.mdb) und nicht die leere mdw-Application erhalten. Also bleibt wohl auch hier nur die 3.DB (leere Datenbank, nur mdw, kein DB-Passwort). Diese rufe ich mit Shell und der mdw auf, und mit GetObject("\..\leer.mdb").Parent erhalte ich sicher die Shell-mdw-Instanz. Dann kann ich die leere DB schließen und endlich die eigentliche DB mit mdw und Passwort öffnen.

Code:
Sub DB_mit_MDW_und_DBPasswort_starten(pPathDB As String, pPasswordDB _
                                    , pPathMDW As String, pUser As String _
                                    , pPassword As String)
    Dim appAcc As Access.Application, PathEmptyDB As String
    Dim lngTaskID As Long, i As Long
   
    PathEmptyDB = CurrentProject.Path & "\leer.mdb"
    lngTaskID = Shell("msaccess """ & PathEmptyDB & """ /wrkgrp """ _
                    & pPathMDW & """ /user " & pUser & " /pwd " & pPassword _
                    , vbNormalFocus)
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~
    'Nur für Access<2007:  Makrosicherheitsabfrage mit SendKeys beanworten.
    SendKeys "{TAB}"
    SendKeys "{ENTER}"
    For i = 1 To 1    'anpassen, falls mit GetObject noch einmal geöffnet wird
        DoEvents
    Next i
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Set appAcc = GetObject(PathEmptyDB).Parent
    appAcc.CloseCurrentDatabase
    appAcc.OpenCurrentDatabase pPathDB, False, pPasswordDB
    Set appAcc = Nothing
    'DoCmd.Quit
End Sub
Das muss doch irgendwie einfacher gehen. SendKeys, ich kann das alles nicht glauben. Wenn ich nur Shell vermeiden und eine DB mit mdw mit
Code:
    Set accApp = New Access.Application
    accApp.xyc
öffnen könnte.

Gruß Mika

Hi,

leider kaum noch Hoffnung auf eine Lösung ohne Shell:
Automatisieren von Microsoft Access mit Visual Basic .NET
Zitat:
Avoiding Access Security Logon Dialog
If user-level security is turned on in Access, the user is prompted with a logon dialog box that prompts for both a user name and a password. A user name and a password cannot be specified using the Access object model. Therefore, if you want to avoid the logon dialog box when you automate Access, you must first start the Msaccess.exe file and provide the /user and /pwd command-line switches to specify the user name and password. Afterward, you can use GetObject to retrieve the Application object of the running instance of Access so that you can then proceed with Automation. For an example of how to do this, click the article number below to view the article in the Microsoft Knowledge Base:
192919 How To Automate a Secured Access Database Using Visual Basic

Gruß Mika
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Datenbank erstellen und eingegeben Daten als Datei speichern 1 Peter1607 766 06. März 2006, 22:30
stpimi Datenbank erstellen und eingegeben Daten als Datei speichern
Keine neuen Beiträge Access Tabellen & Abfragen: Datensatz innerhalb einer Datenbank verschieben 1 nagra 873 24. Feb 2006, 06:31
Funny Datensatz innerhalb einer Datenbank verschieben
Keine neuen Beiträge Access Tabellen & Abfragen: Ein Formular mit Kriterien aus zwei anderen öffnen. 4 blicki 809 03. Feb 2006, 08:14
blicki Ein Formular mit Kriterien aus zwei anderen öffnen.
Keine neuen Beiträge Access Tabellen & Abfragen: Daten aus einer anderen Datenbank in Access übernehmen 1 Gast Andreas 1502 22. Jan 2006, 19:34
jens05 Daten aus einer anderen Datenbank in Access übernehmen
Keine neuen Beiträge Access Tabellen & Abfragen: live Mitschnitt von rs232 zu MAccess Datenbank ??? 1 Peter Müller 983 21. Jan 2006, 17:24
Gast live Mitschnitt von rs232 zu MAccess Datenbank ???
Keine neuen Beiträge Access Tabellen & Abfragen: Datenbank spiegeln, einseitig aktuallisieren oder nur lesen 5 günnaharms 1377 05. Dez 2005, 13:25
lothi Datenbank spiegeln, einseitig aktuallisieren oder nur lesen
Keine neuen Beiträge Access Tabellen & Abfragen: Datenbank für Kennzahlen 13 Bea85 1376 26. Nov 2005, 21:24
stpimi Datenbank für Kennzahlen
Keine neuen Beiträge Access Tabellen & Abfragen: HILFE - Datenbank zur Angebotserstellung 2 Gast 1398 11. Nov 2005, 11:37
LadyRain HILFE - Datenbank zur Angebotserstellung
Keine neuen Beiträge Access Tabellen & Abfragen: Datenbank - Tabelle mit Kalender Übersicht 0 Black is Back 1901 23. Sep 2005, 20:16
Black is Back Datenbank - Tabelle mit Kalender Übersicht
Keine neuen Beiträge Access Tabellen & Abfragen: access datenbank zum dokumentieren 8 siegpes 1097 09. Sep 2005, 08:27
siegpes access datenbank zum dokumentieren
Keine neuen Beiträge Access Tabellen & Abfragen: SQL : Datenbank löschen 1 cfl2si 7440 23. März 2005, 12:30
Willi Wipp SQL : Datenbank löschen
Keine neuen Beiträge Access Tabellen & Abfragen: Stückliste; hierachische Datenbank; Baumstruktur 1 Matzelino 4108 21. März 2005, 14:34
Roland6090 Stückliste; hierachische Datenbank; Baumstruktur
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Word VBA