PDA

Vollständige Version anzeigen : Fremddatenbank mit .mdw per VBA öffnen


Kalle Reiber
11.07.2006, 10:08
Hallo Forum,

ich möchte per VBA aus Datenbank A in einer mittels .mdw geschützten Datenbank B arbeiten (z.B. aus Datenbank B Objekte exportieren).
Weiß jemand, wie man per VBA eine solche Datenbank B unter Verwendung einer .mdw öffnen und Username und Passwort gleich mitgeben kann ?
(also analog zum CMD-Aufruf "C:\...access.exe /wrkgrp meine.mdw /user ich /pwd meinKennwort). Das Öffnen sollte auch ein DataBase-Objekt zurückgeben.

Smaug
11.07.2006, 10:27
Eine Zuweisung der für die externe Datenbank verwendete Workgroup an das Datenbankengine-Objekt ist nicht möglich da dieses Objekt schreibgeschützt ist. Stattdessen muss man eine neue Workspace über das verborgene Objekt PrivDbEngine gehen erstellen. Hier mal ein Link wie das funktioniert:
http://www.*************************58630_0_0_asc.php

AndiD
11.07.2006, 10:38
Moin Kalle,


Dim PrvEng As DAO.PrivDBEngine, wrk As DAO.Workspace
Dim wrkgrp As String, user As String, pwd As String
Dim dbs As DAO.Database
Dim rst As DAO.Recordset

wrkgrp = CurrentProject.Path & "\DeineMDW.mdw"
user = "USER"
pwd = "XXX"


Set PrvEng = New PrivDBEngine
PrvEng.SystemDB = wrkgrp

Set wrk = PrvEng.CreateWorkspace("OwnerRights", user, pwd, dbUseJet)
Set dbs = wrk.OpenDatabase(CurrentProject.Path & "\DeineDB.mdb")
Set rst = dbs.OpenRecordset("DeineTabelle", dbOpenDynaset)


So sollte das klappsen.

Gruz Andi...

Kalle Reiber
11.07.2006, 11:28
Hallo Smaug, hallo AndiD,

vielen Dank für Eure schnellen Antworten. Ich habe die Variante von Smaug ausprobiert - der Zugriff zur Datenbank klappt wunderbar. Super !!!

Jetzt muß ich "nur noch" das Problem mit dem Export lösen ...
(wenn alles funktioniert melde ich mich wieder)

Kalle Reiber
17.07.2006, 08:17
Hallo,

wie angekündigt melde ich mich hiermit zu meinem Problem noch einmal zu Wort.
Der Zugriff auf eine mittels .mdw geschützten Datenbank (also z.B. Lesen in der Datenbank) funktioniert.
Ich habe 3 verschiedene Datenbanken. Meine Programmdatenbank A soll aus einer zweiten Datenbank B in eine dritte Datenbank C Objekte exportieren. Die Datenbanken B und C sind durch .mdw-Datei geschützte Datenbanken.

Mein bisheriger Code führt bei der Docmd-Methode zum Fehler "Sie sind nicht berechtigt ... zu exportieren (Fehler 2617)


' Variablen deklarieren
Dim pdbe As DAO.PrivDBEngine
Dim rs As DAO.Recordset
Dim db As DAO.Database
Dim strDB As String
Dim strSystemDB As String
Dim strUser As String
Dim strPassword As String

'-------------- Quelldatenbank öffnen --------------------------------
' neue Access-Instanz öffnen
Set appAccQuelle = New Access.Application
With appAccQuelle
.Visible = True

' Quelle öffnen
Call .OpenCurrentDatabase(Me.QuellDB)
strDB = Me.QuellDB 'Pfad zur Datenbank.mdb
strSystemDB = "meineSystem.mdw" 'Pfad zur System.mdw
strUser = "meinUser" 'Benutzer
strPassword = "pw" 'Passwort
Set pdbe = New PrivDBEngine
With pdbe
.SystemDB = strSystemDB
.DefaultUser = strUser
.DefaultPassword = strPassword
End With

Set db = pdbe.OpenDatabase(Me.QuellDB)
End With
Set QuellDaba = appAccQuelle.CurrentDb()

'-------------- Zieldatenbank öffnen --------------------------------
' neue Access-Instanz öffnen
Set appAccZiel = New Access.Application
With appAccZiel
.Visible = True

' Ziel öffnen
Call .OpenCurrentDatabase(Me.ZielDB, True)
strDB = Me.QuellDB 'Pfad zur Datenbank.mdb
strSystemDB = "meineSystem.mdw" 'Pfad zur System.mdw
strUser = "meinUser" 'Benutzer
strPassword = "pw" 'Passwort
Set pdbe = New PrivDBEngine
With pdbe
.SystemDB = strSystemDB
.DefaultUser = strUser
.DefaultPassword = strPassword
End With

'DB öffnen
Set db = pdbe.OpenDatabase(Me.ZielDB)
End With

Set ZielDaba = appAccZiel.CurrentDb()

appAccZiel.DoCmd.TransferDatabase acExport, "Microsoft Access", Me.ZielDB, acQuery, "qry_Stamm", "qry_Stamm"


Hat jemand noch 'ne Idee ?

Smaug
22.07.2006, 15:54
es wird wohl daran liegen, dass man für jede MDW-geschützte Datenbank ein separates PrivDBEngine-Objekt, also unterschiedliche Objektvariablen benötigt. Jedem dieser PrivDBEngine-Objekte müssen die jeweiligen Arbeitsgruppen- und Anmeldedaten zugewiesen werden. Danach sollte das Verschieben von Daten aus A von B nach C problemlos möglich sein.