从.Net调用访问模块中的例程?

时间:2009-05-08 00:48:58

标签: .net ms-access automation

我无法从.Net(VB或C#)自动化Access 2007。我想做的就是从.Net中调用Access模块​​中的子程序。

最终,我必须让它在VB中运行,但我一直在尝试两种相同的结果。

以下是我的VB测试表中的代码。它导致错误:

System.Runtime.InteropServices.COMException(0x800A9D9F):来自HRESULT的异常:Microsoft.Office.Interop.Access.ApplicationClass.Run中的0x800A9D9F(String Procedure,Object& Arg1,Object& Arg2,...,Object& amp; ; Arg30)

我在Access中的测试Sub被命名为“MyTest”,并且模块名为“Module1”。它所做的只是在表格中插入一条记录。从Access内部运行良好。我尝试了各种“Module1.MyTest”,“MyTest()”,“Call MyTest”等的排列,但没有运气。

我在自动化Access(和其他Office应用程序)的网络上找到了一些其他示例,但似乎无法正常工作。如果有人能指出我的工作实例,我将不胜感激。

示例代码:

Imports Access = Microsoft.Office.Interop.Access
Imports Microsoft.Office.Core

Public Class FormTest
    Private Sub cmdTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTest.Click

        Dim aa As New Access.Application()

        Try
            aa.OpenCurrentDatabase("c:\Test.accdb")
            aa.Run("MyTest")
        Catch ex As Exception
            MsgBox(ex.ToString())
        Finally
            If aa IsNot Nothing Then
                aa.Quit(Access.AcQuitOption.acQuitSaveNone)
            End If
            Me.Close()
        End Try

    End Sub
End Class

3 个答案:

答案 0 :(得分:2)

这是安全。在Access中,我不得不关闭所有安全检查。一旦我这样做,它运作良好。

答案 1 :(得分:0)

尝试查看InnerException(错误的实际原因)。

另外,如果您了解VB6 - 尝试在VB6和VB中编写相同的代码。看看是否有效。
如果您没有遇到任何错误,它应该在VB.net中工作相同

编辑:MyTest是公共方法吗?

答案 2 :(得分:0)

如果访问过程的目标是操作访问文件中的表,为什么不打开到.mdb文件的ODBC或OLEDB连接,然后直接在表上执行工作,方法是打开一个记录集和操作它,或通过发送相应的SQL指令?

您至少会节省创建新Access实例所需的所有时间。