Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 作为swarm打开msaccess_Multithreading_Ms Access_Vba - Fatal编程技术网

Multithreading 作为swarm打开msaccess

Multithreading 作为swarm打开msaccess,multithreading,ms-access,vba,Multithreading,Ms Access,Vba,我们都知道ms access不是多线程的,所以当msacces运行一个长查询时,它会挂起等待查询完成。我想要的是从access打开一个新的access实例,以便在后台运行查询或vba代码。运行后,它需要在返回结果(可能是通过sql server后台)后对自己进行工具包 我以前在excel中看到过一些东西,但我想知道它是否可以在access中实现 excel变体在这里[excel swarm][1 更新 我使用以下代码打开access Dim appAccess As Object Set a

我们都知道ms access不是多线程的,所以当msacces运行一个长查询时,它会挂起等待查询完成。我想要的是从access打开一个新的access实例,以便在后台运行查询或vba代码。运行后,它需要在返回结果(可能是通过sql server后台)后对自己进行工具包

我以前在excel中看到过一些东西,但我想知道它是否可以在access中实现

excel变体在这里[excel swarm][1

更新

我使用以下代码打开access

Dim appAccess As Object  
Set appAccess = CreateObject("Access.Application")  
Call appAccess.OpenCurrentDatabase( _ "D:\test.accdb")
appAccess.UserControl = True 
Set appAccess = Nothing
目标访问数据库使用循环预格式化,因为在访问打开时启动了测试。问题是,在启动目标访问的ans运行期间,源访问挂起。 我可以用定时器给它一个延迟启动,然后它的工作


主要的问题是,我如何统计一个未预成型的access数据库,创建vba代码、查询odbc连接等,并在源数据库不挂起的情况下运行它。

是的,这是可能的


使用命令Shell打开Access的另一个实例,并添加命令行参数Access以保存有关要运行的查询的信息。

您可以尝试将类似的操作从Shell命令发送到另一个VBA主机,例如excel,这可能会触发事件。这是一个类,其中传入DB path和查询名称的属性,然后转到执行时,它使用DBs ADO连接的Execute Complete事件,我将其编码为创建一个Excel实例并用结果填充

<>我并没有完全在测试中做过测试,但我会在午餐时充分测试并编辑为Req,但起点

Option Explicit

Private WithEvents c As ADODB.Connection
Private strDBPath As String
Private strQueryToRun As String

Public Property Let DBPath(strPath As String)
    strDBPath = strPath
End Property

Public Property Let QueryToRun(strQuery As String)
    strQueryToRun = strQuery
End Property

Public Function GO()

Dim a As New Access.Application
a.OpenCurrentDatabase strDBPath, False

Set c = a.CurrentProject.Connection
c.EXECUTE strQueryToRun

a.CloseCurrentDatabase

a.Quit

Set a = Nothing

End Function

Private Sub c_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
                        ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)

    '   what to do with the results?

    Dim xl As New Excel.Application
    Dim xlWb As Excel.Workbook

    xl.Visible = True
    Set xlWb = xl.Workbooks.Add
    xlWb.Sheets(1).Range("a1").CopyFromRecordset pRecordset

End Sub

看起来不错,但我不能让它工作。现在我必须先做另一项工作,所以这必须等待一段时间