English 中文(简体)
尝试控制另一个数据库时出现间歇性错误
原标题:
  • 时间:2008-09-16 08:40:16
  •  标签:

我有以下代码:

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。

这是一个间歇性错误。由于这是一个月只运行一次的生产代码,因此很难复制,目前我无法给您确切的文本和编号。这已经是第二个月了。

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

数据流是每月更新一次一个数据库中的所有项目,然后在另一个数据库中将这些信息提供给用户。

Maybe, it s because of the first line in the Routines code: If vbNo = MsgBox("Do you want to update?", vbYesNo, "Update") Then Exit Function End If

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

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


这是一个间歇性错误。由于这是一个月只运行一次的生产代码,因此很难复制,目前我无法给您确切的文本和编号。这已经是第二个月了。

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

数据流是每月更新一次一个数据库中的所有项目,然后在另一个数据库中将这些信息提供给用户。

Maybe, it s because of the first line in the Routines code: If vbNo = MsgBox("Do you want to update?", vbYesNo, "Update") Then Exit Function End If

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


我已经在我们的开发数据库中尝试过了,它很有效。这并不意味着什么,因为其他代码在开发中也能很好地工作。

最佳回答

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

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

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

菲利普,你的答案当然是正确的。如果我没有事先制定好程序,我会选择这条路的。

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

问题回答

我想这个错误消息与您的一个数据库的状态有关。您正在使用此处的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.recordset)来完成,这样您就可以选择自己喜欢的对象。

如果您希望使用其他方式运行该函数,请尝试以下操作:

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中执行的函数名称





相关问题
热门标签