2

我有以下代码:

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

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

我正在使用 MS Access 2003。

这是一个间歇性错误。由于这是每月仅运行一次的生产代码,因此极难重现,我目前无法为您提供确切的文本和编号。这是发生这种情况的第二个月。

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

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

也许是因为 'Routines' 代码中的第一行: If vbNo = MsgBox("Do you want to update?", vbYesNo, "Update") Then Exit Function End If

我将制作另一个没有 MsgBox 的子程序。

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


这是一个间歇性错误。由于这是每月仅运行一次的生产代码,因此极难重现,我目前无法为您提供确切的文本和编号。这是发生这种情况的第二个月。

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

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

也许是因为 'Routines' 代码中的第一行: If vbNo = MsgBox("Do you want to update?", vbYesNo, "Update") Then Exit Function End If

我将制作另一个没有 MsgBox 的子程序。


我已经在我们的开发数据库中尝试过这个并且它有效。这并不意味着任何其他代码在开发中也可以正常工作。

4

3 回答 3

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)来完成,因此您可以选择自己喜欢的对象。

于 2008-09-16T15:35:56.637 回答
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 中执行函数名称

于 2008-09-17T00:35:16.480 回答
1

我已经能够重现“开发”中的错误。

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

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

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

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

于 2008-09-17T08:18:49.783 回答