Anti-FAQ: Jak w DAO otworzyć bazę na innym pliku grupy roboczej (SYSTEM.MDW)?
Sposób podał Mariusz Sankowski, poniżej cytuję tekst Mariusza:
Jak przez DAO z poziomu jednej bazy, dostać się do drugiej, zabezpieczonej
na poziomie użytkownika, jeśli pliki grup roboczych są inne w tych bazach?
(...)
Choć z pozoru rozwiązanie wydaje się proste: ustawić właściwość
DBEngine.SystemDB na plik roboczy bazy, do której chcemy się dostać,
a następnie utworzyć odpowiednio obiekty Workspace i Database.
Okazuje się jednak, że właściwość DBEngine.SystemDB jest tylko do odczytu
(co w gruncie rzeczy jest logiczne).
Access ma na szczęscie ukryty/nieudokumentowany obiekt PrivDBEngine,
dlaktórego można ustawiać właściwość SystemDB.
Aby zastosować poniższą procedurę musimy znać 4 parametry:
- ścieżkę pliku MDW
- ścieżkę pliku zabezpieczonej bazy
- konto i hasło użytkownika w pliku MDW
Sub PolaczZabezpieczonaBaze(strMDW$, strMDB$, strUser$, strPassword$)
Dim dbe As DAO.PrivDBEngine
Dim wks As DAO.Workspace
Dim dbs As DAO.Database
Dim rcs As DAO.Recordset
On Error GoTo Err_PolaczZabezpieczonaBaze
Set dbe = New PrivDBEngine: dbe.SystemDB = strMDW
Set wks = dbe.CreateWorkspace("Costam", strUser, strPassword)
Set dbs = wks.OpenDatabase(strMDB)
'------------------------------------------------------------
'I już możesz robić co chcesz, np.:
Set rcs = dbs.OpenRecordset("SELECT * From MSysObjects WHERE Type=1")
rcs.MoveLast
MsgBox "Masz " & rcs.RecordCount & " tabel w Twojej bazie '" & strMDB & "'."
rcs.Close
'------------------------------------------------------------
Exit_PolaczZabezpieczonaBaze:
Set rcs = Nothing
Set dbs = Nothing
Set wks = Nothing
Set dbe = Nothing
Exit Sub
Err_PolaczZabezpieczonaBaze:
Beep
MsgBox "Error " & Err.Number & ". " & Err.Description, vbExclamation
Resume Exit_PolaczZabezpieczonaBaze
End Sub
Pozdrawiam,
MS