从.Net调用访问模块中的例程?
Posted
技术标签:
【中文标题】从.Net调用访问模块中的例程?【英文标题】:Call Routine in Access Module From .Net? 【发布时间】:2009-05-08 00:48:57 【问题描述】:我无法从 .Net(VB 或 C#)自动化 Access 2007。我想要做的就是从 .Net 调用 Access 模块中的子例程。
最终,我必须让它在 VB 中工作,但我一直在尝试两者,结果相同。
下面是我的 VB 测试表单中的代码。它导致错误:
System.Runtime.InteropServices.COMException (0x800A9D9F):来自 HRESULT 的异常:Microsoft.Office.Interop.Access.ApplicationClass.Run 的 0x800A9D9F(字符串过程,对象& Arg1,对象 &Arg2,...,对象 &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
【问题讨论】:
【参考方案1】:这是安全性。在 Access 中,我不得不关闭所有安全检查。一旦我这样做了,它就可以正常工作了。
【讨论】:
我们通过 Access 2007 中的信任中心将 MDB 添加到信任位置。 @CamronBute 你可以使用these instructions from Microsoft for Access 2007。【参考方案2】:尝试查看 InnerException(错误的实际原因)。
另外,如果您了解 VB6 - 请尝试在 VB6 中编写相同的代码,看看是否可行。 如果您没有遇到任何错误,它应该在 VB.net 中工作相同
编辑:MyTest 是公共方法吗?
【讨论】:
InnerException 为空。我没有 VB6,但我已经从 FoxPro 尝试过,使用 aa = CREATEOBJECT("Access.Application") 并且当我运行时,我得到“OLE 错误代码 0x800A9D9F:未知的 COM 状态代码”。【参考方案3】:如果您的访问过程的目标是操作访问文件中的表,为什么不打开与 .mdb 文件的 ODBC 或 OLEDB 连接,然后直接在表上执行工作,或者通过打开记录集并对其进行操作,还是通过发送相应的 SQL 指令?
您至少可以节省创建新 Access 实例所需的所有时间。
【讨论】:
以上是关于从.Net调用访问模块中的例程?的主要内容,如果未能解决你的问题,请参考以下文章