我们都知道ms访问不是多线程的,所以当msacces运行一个长查询时,它会挂起等待查询完成。我想要的是打开访问新的访问实例来运行查询或在后台运行vba代码。在运行之后,它需要在它返回结果之后自己套件(可能是通过sql server背景)
我之前在excel中看过一些东西,但我想知道它是否可以在访问中进行
excel变种在这里[excel swarm] [1
更新
我使用以下代码打开访问权限
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
Call appAccess.OpenCurrentDatabase( _ "D:\test.accdb")
appAccess.UserControl = True
Set appAccess = Nothing
目标访问数据库已预先格式化为循环,因为测试将在访问打开时启动。问题是在启动和运行目标访问期间,源访问会挂起。 我可以使用计时器给它一个延迟启动然后它的工作。
主要问题是如何统计未预先格式化的访问数据库,创建诸如vba代码之类的内容,查询odbc连接等并在没有源数据库挂起的情况下运行它。
答案 0 :(得分:1)
你可以尝试从shell命令到另一个VBA主机,例如excel,它可以触发事件。这是一个类,其中传递了DB路径和查询名称的属性,然后执行GO,它使用DBs ADO连接的Execute Complete事件,我将其编码为创建Excel实例并填充结果
我没有像在中间的东西那样完全测试,但是我将在午餐时完全测试并按照要求进行编辑,但这是一个起点
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
答案 1 :(得分:0)
是的,这是可能的。
使用命令 Shell 打开另一个Access实例 - 并添加命令行参数Access以保存有关要运行哪些查询的信息。