在安全的Ms-Access数据库中远程运行app.SaveAsText

时间:2017-07-20 07:34:31

标签: vba ms-access-2003 working-remotely mdw

我有一个MS-Access数据库,专门用于管理我的其他MS-Access数据库:)

我们称之为:AppManager

我在其中存储了有关我已经开发的其他DBS的信息。

- 所有这些文件都有不同的工作组文件,用于实现每个用户/组的安全权限 -

.MDB / .MDW的位置与用户名&存储在我的AppManager中。密码(管理员)

注意:

  • AppManager是为了我自己的利益 - 因为我是这些DBS的管理员/开发者 -

  • .mdb是因为我们公司仍在使用MS-Access 2k - 具体到2003年 -

  • .mdw是安全工作组文件(没有它,任何安全的Db都无法打开)

现在我在AppManager中加入了各种功能: 例如查看群组/用户信息,重置密码,其他自定义功能等等

我正在尝试向AppManager添加新功能 这将使我能够从AppManager-

中远程导出任何这些Dbs中的所有对象

以下是此代码:

    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

我需要将上面的代码与具有Docmd,SaveAsText方法的Application对象结合起来

就像从MSDN获取的代码 - 但它没有处理secure-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 个答案:

答案 0 :(得分:1)

经过更广泛的搜索,我设法提出此解决方案 灵感来自"An Article" (我已经添加了我的触摸)

代码:

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