2017-02-14 71 views
-1

我们都知道ms访问不是多线程的,所以当msacces运行一个长查询时,它挂起等待查询完成。我想要的是通过访问一个新的实例来运行查询或在后台运行vba代码。运行后,它需要它变成回来后的结果(也许虽然在SQL Server背景)作为swarm打开msaccess

我已经在Excel中看到过的东西试剂盒本身,但我不知道这是更多钞票在进入

Excel的变种做是这里[EXCEL群] [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

是的,那是可能的。

使用命令Shell打开另一个Access实例 - 并添加命令行参数Access可以保存关于运行哪些查询的信息。

1

你可以尝试这样的命令从一个shell命令到另一个VBA主机,比如excel,这可能触发事件。这是一个类,其中传递了DB路径和查询名称的属性,然后执行GO,它使用DB 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 
+0

看上去很不错,但我不能得到它的工作。现在我必须先做另一份工作,所以这必须等待一段时间 – ManuelD