如何检查 VB.NET 代码中 Access SysCmd 失败的原因?

Posted

技术标签:

【中文标题】如何检查 VB.NET 代码中 Access SysCmd 失败的原因?【英文标题】:How to check the cause of Access SysCmd fail in VB.NET code? 【发布时间】:2013-01-07 11:45:51 【问题描述】:

我们有一个用 VB.NET 和客户端的 VBA 开发的应用程序。在 VB.NET 开发的安装程序自定义操作中,我们使用 Access 的 SysCmd 603 将 mdb 文件编译为 mde,这是著名的未记录的。示例代码如下所示:

a = CreateObject("Access.Application")
If a.SysCmd(603, PATH_TO_BXB_FILE, PATH_TO_BXE_FILE) = 0 Then
    MsgBox("Fail to compile to MDB file")
End If

此代码之前一直有效,直到最近。现在 Syscmd 调用返回 0,表示编译失败。但是由于我不熟悉Access编程,我不知道如何进一步检查导致此失败的原因。在此链接Application.SysCmd Method (Access) 中,它表示如果失败,它将生成运行时错误,但我不知道如何检查此错误。请帮忙

【问题讨论】:

也许可以通过vb.net中的try-catch来完成,所以在catch code中msgbox会弹出exception.Message? @johnyTee 感谢您的快速回复。但是我已经尝试过这种直观的方法,并且它不会抛出 System.Exception。它只是简单地返回 0。我猜它会在其他地方写下错误的原因。 处理我自己的 2010 MS Access 副本和这个 social.msdn.microsoft.com/Forums/en-US/accessdev/thread/…,Syscmd 运行。您的 mdb 是否包含代码?代码是否干净?该链接表明 Syscmd 在自动化中的用途有限。 好的,我在您发布链接的页面上的注释下发现了这一点:'如果 objectname 参数引用的对象未打开或不存在,则 SysCmd 方法返回值为零.' 【参考方案1】:

syscmd 的 603 参数未记录在案。它会因多种原因而失败,例如,在 VBA 下运行,如果您不使用单独的 MS Access 实例,它将失败。在this中,其他失败的原因如下:

当它用于在单独的 Access 数据库(与解决方案数据库分开)中运行的 VBA 代码中时; 解决方案数据库关闭时;和 当解决方案数据库中的 VBA 代码没有语法错误时。

该文档还列出了这些参考资料:

Douglas Steele 在这里提出了一个有趣的观点:http://www.pcreview.co.uk/forums/thread-2621925.php Tony Toews 在这里调查未记录的 SysCmds:https://msmvps.com/blogs/access/archive/2007/08/19/so-what-are-the-undocumented-syscmd-items.aspx Tony Toews 还链接到此页面:http://www.everythingaccess.com/tutorials.asp?ID=Undocumented-SysCmd-Functions

【讨论】:

谢谢雷穆。我根据您对我的问题帖子的评论解决了这个问题:我的 mdb 文件包含代码,并且缺少两个引用。当我在 Access 中打开 mdb 文件并尝试对其进行编译时,我看到此参考缺少警告。在我更正之后,编译通过了,SysCmd 调用也通过了

以上是关于如何检查 VB.NET 代码中 Access SysCmd 失败的原因?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Access 数据库 VB.net 中检索特定数据?

如何使用VB.NET在Access数据库中插入多条记录

VB.Net/Access SQL 插入子查询问题

如何从 VB.net 将日期写入 Access DB

使用 VB.NET 打印 MS Access 报告

如何使用 vb.net 从 MS Access DB 表单中找出 Activex 控件