Multithreading 作为swarm打开msaccess
我们都知道ms access不是多线程的,所以当msacces运行一个长查询时,它会挂起等待查询完成。我想要的是从access打开一个新的access实例,以便在后台运行查询或vba代码。运行后,它需要在返回结果(可能是通过sql server后台)后对自己进行工具包 我以前在excel中看到过一些东西,但我想知道它是否可以在access中实现 excel变体在这里[excel swarm][1 更新 我使用以下代码打开accessMultithreading 作为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
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
看起来不错,但我不能让它工作。现在我必须先做另一项工作,所以这必须等待一段时间