【问题标题】:How Do I Bypass MS Access Startup When Using OLE?使用 OLE 时如何绕过 MS Access 启动?
【发布时间】:2009-01-13 22:36:03
【问题描述】:

我正在尝试使用 C# 和 OLE 从访问数据库中自动导出 xml。除了显示启动表单并且在没有用户干预的情况下不会关闭之外,一切都运行良好。

这是我目前正在做的事情:

objAccess = CreateObject("Access.Application");
objAccess.OpenCurrentDatabase("C:\\MYDB.mdb", true); //true = open in exclusive mode
objAccess.ExportXML(0, "TestTable", "c:\\test.xml");
objAccess.CloseCurrentDatabase();
objAccess.Quit();

【问题讨论】:

    标签: c# ms-access automation ms-office ole


    【解决方案1】:

    无需打开 Access 即可将表格输出到 XML,例如在 VBScript 中:

    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adPersistXML = 1
    
    Dim strCon, cn, rs
    
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    strCon = "Provider= Microsoft.Jet.OLEDB.4.0; Data Source=" & "C:\Docs\LTD.mdb"
    
    cn.Open strCon
    rs.Open "Select * from Table1", cn, adOpenStatic, adLockOptimistic
    
    If Not rs.EOF Then
        rs.MoveFirst 
        rs.Save "C:\Docs\Table1.xml", adPersistXML
    End If
    
    rs.Close
    cn.Close
    

    【讨论】:

    • MS Access 吐出的 XML 是否与您的 ADO 经典(非 ADO.NET)代码吐出的 XML 相同?
    【解决方案2】:

    据我所知,唯一的方法是使用 msaccess.exe 上的 /nostartup 开关

    所以你必须使用shell命令来获取访问对象

    我有一个打开数据库并返回对象的函数(这是您必须转换为 C# 的 VBA 代码)

    Private Function OpenDatabaseWithShell(pDatabaseFullPath As String) As Access.Application
    
    Dim AccObj As Access.Application
    
        On Error GoTo ErrorHandler
    
        Set OpenDatabaseWithShell = Nothing
    
        Dim cmd As String
    
        On Error Resume Next
    
        ' basically build full msaccess.exe path and append database name and command switches
        cmd = SysCmd(acSysCmdAccessDir) & "MSAccess.exe """ & psDatabaseFullPath & """"
        cmd = cmd & " /nostartup /excl"
    
        'start ms access with shell
        Shell PathName:=cmd
    
        Do 'Wait for shelled process to finish.
          Err = 0
          Set AccObj = GetObject(pDatabaseFullPath)
        Loop While Err <> 0
    
        On Error GoTo ErrorHandler
    
        'return access object
        Set OpenDatabaseWithShell = AccObj
    
    NormalExit:
        Exit Function
    
    ErrorHandler:
        'error logging here
        Exit Function
    
    End Function
    

    编辑: 这是一些 VB.NET 代码的link,它做类似的事情。向下滚动到“创建完整的示例 Visual Basic .NET 项目”并查找“ShellGetDB”函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多