尝试在VBA中控制另一个数据库时发生间歇性错误

时间:2008-09-16 08:40:17

标签: ms-access access-vba

我有以下代码:

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")
obj.Run "Routine"
obj.CloseCurrentDatabase
Set obj = Nothing

我正在试验的问题是一个弹出窗口,告诉我Access无法将焦点设置在其他数据库上。从代码中可以看出,我想在另一个mdb中运行一个子例程。任何其他方式来实现这一点将不胜感激。

我正在使用MS Access 2003。

这是间歇性错误。由于这是每月只运行一次的生产代码,因此重现起来非常困难,而且我现在无法提供确切的文本和数字。这是发生的第二个月。

我怀疑当有人使用此数据库或其他数据库时可能会发生这种情况。

数据流是在一个数据库中每月更新一次“项目”,然后在另一个数据库中提供此信息。

也许,这是因为'Routines'代码中的第一行:    如果vbNo = MsgBox(“你想要更新?”,vbYesNo,“更新”)那么        退出功能    结束如果

我将在没有MsgBox的情况下制作另一个子程序。

我已经能够重现这种行为。当焦点必须转移到被调用的数据库时,它会发生,但用户在第一个数据库上设置焦点([ALT] + [TAB])。 “解决方案”是教育用户。


这是间歇性错误。由于这是每月只运行一次的生产代码,因此重现起来非常困难,而且我现在无法提供确切的文本和数字。这是发生的第二个月。

我怀疑当有人使用此数据库或其他数据库时可能会发生这种情况。

数据流是在一个数据库中每月更新一次“项目”,然后在另一个数据库中提供此信息。

也许,这是因为'Routines'代码中的第一行:     如果vbNo = MsgBox(“你想要更新?”,vbYesNo,“更新”)那么         退出功能     结束如果

我将在没有MsgBox的情况下制作另一个子程序。


我在我们的开发数据库中尝试了这个并且它有效。这并不意味着什么,因为其他代码在开发中也可以正常工作。

3 个答案:

答案 0 :(得分:1)

我猜这个错误消息链接到您的某个数据库的状态。您正在使用Jet连接和Access对象,并且由于多种原因(多用户环境,无法删除LDB锁文件等),您可能无法正确关闭活动数据库并打开另一个。因此,据我所知,解决方案是忘记Jet引擎并使用另一个连接来更新“其他”数据库中的数据。

如果您说“数据流是每个月在一个数据库中更新所有'项目',然后在其他数据库中提供此信息”,我认为您的“例程”的作用是更新某些数据,通过SQL指令或等效的记录集更新。

为什么不尝试通过打开与其他数据库的连接来进行相应的更新,以及(1)发送相应的SQL指令或(2)打开记录集并进行所请求的更新?

一个想法是例如:

Dim cn as ADODB.connexion, 
    qr as string, 
    rs as ADODB.recordset

'qr can be "Update Table_Blablabla Set ... Where ...
'rs can be "SELECT * From Table_Blablabla INNER JOIN Table_Blobloblo  

set cn = New ADODB.connexion
cn.open

You can here send any SQL instruction (with command object and execute method) 
or open and update any recordset linked to your other database, then

cn.close

这也可以通过ODBC连接(和DAO.recordsets)完成,因此您可以选择自己喜欢的对象。

答案 1 :(得分:1)

如果您想要另一种运行该功能的方法,请尝试以下方法:

Dim obj As New Access.Application
obj.OpenCurrentDatabase (CurrentProject.Path & "\Working.mdb")

obj.DoCmd.RunMacro "MyMacro"
obj.CloseCurrentDatabase
Set obj = Nothing

' MyMacro '的操作为“ RunCode ”,并且您希望在Working.mdb中执行函数名称

答案 2 :(得分:1)

我已经能够在'开发'中重现错误。

“此操作无法完成,因为其他应用程序正忙。请选择”切换到“以激活....”

我真的看不到消息的其余部分,因为它快速闪烁。我想这个错误是由于两个数据库之间的“切换”造成的。我希望通过教育用户,这将停止。

菲利普,你的回答当然是正确的。如果我事先没有制定“常规”,我会选择这条道路。

“我已经能够重现这种行为。当焦点必须转移到被调用的数据库,但用户在第一个数据库上设置焦点([ALT] + [TAB])时,就会发生这种情况。 '是为了教育用户。“由于无法阻止用户在Windows中切换应用程序,我想关闭主题。