多线程访问vba错误3260

时间:2017-08-24 01:14:23

标签: multithreading vba ms-access

我尝试使用VB脚本在Access VBA中设置多线程。这些例程基于Tomasz Kacprowicz的Excel例程。

这些方法创建主数据库文件的单独副本,该副本也包含VBA函数。然后,脚本文件将打开每个副本并在每个副本中运行相同的功能。 Access数据库的所有副本都运行相同功能的副本。这工作正常,直到函数尝试打开公共数据库。

第一个副本打开标准数据库,但无意中锁定了公共数据库,使其无法被其他Access副本打开。它抛出错误3260.

VB脚本是:     {     设置objAccess = CreateObject(" Access.Application")

With objAccess
.OpenCurrentDatabase("C:\Personnal\investment\7055_1.accdb")
.Run "RunForVBA", 1, 501
End With
Set objAccess = Nothing
Set objAccess = GetObject(, "Access.Application")

objAccess.TempVars.Item ("S7055_1") = 1
Do Until objAccess.TempVars.Item ("S7055_1")
If Err.Number <> 0 Then Exit Do
WScript.Shell.Sleep(100)
objAccess.TempVars.Item ("S7055_1") = 1
Loop
Set objAccess = Nothing

&#34; RunForVBA&#34;是VBA功能,在每个访问副本中都是相同的。 &#34; 7055_1.accdb&#34;是复制的数据库之一。

我已检查默认开启和默认锁定模式。我还试图强制打开模式在Opendatabase和OpenCurrentDatabase方法中共享。它似乎没有任何区别。

以下代码位于函数&#34; RunForVBA&#34;:

Set DBFunc = New clsDBFunctions
Set objAccess = CreateObject("Access.Application")

With DBFunc
.TableName = "TestTable"
    .DataBaseName = .GetLinkedDBName(.TableName)       'full DB path
    If .DataBaseName <> vbNullString Then    'will return 0 if no table
        Set .db = Nothing   'clear preset DB in clsDBFunctions
        Set .db = OpenDatabase(.DataBaseName, False, False) 
    End If

任何帮助都将不胜感激。

0 个答案:

没有答案