Запустите app.SaveAsText удаленно в защищенной базе данных Ms-Access.

У меня есть база данных MS-Access, которая предназначена для управления другими моими базами данных MS-Access:)

Давайте назовем это: AppManager

Я храню в нем информацию о других разработанных мной БД.

все они имеют разные файлы рабочей группы, которые используются для реализации разрешений безопасности для пользователя / группы;

Местоположение.MDB/.MDW хранится в моем AppManager вместе с именем пользователя и паролем (администратора).

Заметки:

  • AppManager для моей собственной пользы - так как я администратор / разработчик этих Dbs-

  • .mdb потому, что в нашей фирме мы все еще используем MS-Access 2k - чтобы быть конкретным 2003-

  • .mdw - это файл рабочей группы безопасности (без него невозможно открыть любой защищенный Db)

Теперь я включил в AppManager различные функции: такие как просмотр информации о группах / пользователях, сброс пароля, другие пользовательские функции... и т. Д.

Я пытаюсь добавить новую функцию в AppManager, которая позволит мне удаленно экспортировать все объекты в любой из этих БД - из AppManager-

Вот этот код:

    Function ConnectSecuredDB 
    ( MDBPath As String, MDWPath As String, UserName As String, Password As String) As Boolean

        Dim wsp As Workspace, db As Database, objEngine As DBEngine

        Set objEngine = New PrivDBEngine

        objEngine.SystemDB = MDWPath
        Set wsp = objEngine.CreateWorkspace("New", UserName, Password, dbUseJet)

        Set db = wsp.OpenDatabase(MDBPath)

        'I Do some stuff here...

        db.Close
        wsp.Close

        Set db = Nothing
        Set wsp = Nothing
    End Function

Мне нужно объединить приведенный выше код с объектом Application, который имеет методы Docmd, SaveAsText

например, этот код взят из MSDN, но проблема в том, что он не работает с обеспеченными базами данных mdw:

    Dim appAccess As Access.Application 

        Sub DisplayForm() 

        Dim strDB as String 

        ' Initialize string to database path. 
        Const strConPathToSamples = "C:\Program " _ 
    & "Files\Microsoft Office\Office11\Samples\" 

        strDB = strConPathToSamples & "Northwind.mdb" 

        ' Create new instance of Microsoft Access. 
        Set appAccess = _ 
        CreateObject("Access.Application") 

        ' Open database in Microsoft Access window. 
        appAccess.OpenCurrentDatabase strDB 

        ' Open Orders form. 
        appAccess.DoCmd.OpenForm "Orders" 
        End Sub

в моем случае мне пришлось бы заменить последнюю строку на:

        With db.Containers("Modules")
          For Each doc In .Documents
            appAccess.SaveAsText acModule, doc.Name, "C:\temp\" & doc.Name & ".mod"
          Next doc
        End With
        'and repeat it with other objects reports, macros, ...

моя функция ConnectSecuredDB не включает объект Access.Application

какие-нибудь идеи о том, как этого добиться?

Я надеюсь, что есть обходной путь.

Спасибо

1 ответ

Решение

После более тщательного поиска мне удалось найти это решение, вдохновленное "Статьей" (я добавил свой контакт)

Код:

Dim app
Dim db As Database, doc As Document
Dim DBPath As String, MDWPath As String
Dim UserName As String, Password As String
Dim strRunCmd As String, msaccessPath As String

Set app = CreateObject("Access.Application")

DBPath = "D:\My Documents\myDb.mdb" 'full path of DB
MDWPath = "D:\My Documents\Secured.mdw" 'full path of Workgroup file
Username = "your User id" 'a legitimate user account (in the workgroup)
Password = "user's password" 

msaccessPath = "C:\Program Files\Office2003\Office11\msaccess.exe"

strRunCmd = """" & msaccessPath & """ """ & DBPath & """ /WRKGRP """ & MDWPath & """ /User """ & UserName & """ /Pwd " & Password
Shell strRunCmd, vbMaximizedFocus

Do
    Set app = GetObject(DBPath)
    DoEvents
Loop While app Is Nothing

Set db = app.CurrentDb

bkPath = "C:\Temp\bkDB\"
With db.Containers("Forms")
   For Each doc In .Documents
       app.SaveAsText acForm, doc.Name, bkPath & doc.Name & ".frm"
   Next doc
End With
'repeat the loop to other object types such as reports, modules, macros

'cleanup
app.CloseCurrentDatabase
app.Quit
Set app = Nothing

db.Close
Set db = Nothing
Другие вопросы по тегам