database - 使用 VBA 并行打开数据库

标签 database ms-access vba

我有一个 Access 数据库,用于计算大量人员一周中每一天的绩效分数。

由于数据集的大小,该过程运行得相当慢。作为加快速度的一种潜在方法,我正在考虑一个过程,该过程将有 5 个独立的数据库,每个数据库计算一天的分数。

我编写了下面的 VBA 代码,它只打开所有这些数据库(一旦每个数据库打开,它都有自己的 autoExec 宏,将启动它自己的过程)。

Sub DBloop()
 Dim dbArr As Variant
 Dim i As Integer

 dbArr = Array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")

 For i = 0 To UBound(dbArr)
     openDBs CStr(dbArr(i))
 Next
End Sub

Sub openDBs(dbname As String)
 Dim acc As Access.Application
 Dim DBpath As String
 Dim strDbName As String

 DBpath = "H:\Performance Test\"
 strDbName = DBpath & dbname & ".accdb"

 Set acc = New Access.Application
 acc.Visible = True
 acc.OpenCurrentDatabase strDbName, False
End Sub

不幸的是,当每个数据库打开时,初始过程都在等待该数据库的 autoExec 宏完成,然后再打开下一个数据库。有谁知道是否有解决方法?

最佳答案

有很多方法可以确保您不会同步打开数据库。

下面是最简单的一个:

Application.FollowHyperlink strDbName

(无需创建新的 Access 应用程序对象)。

另一种方法是让 AutoExec 宏中的代码异步执行。我为此使用的技术如下:

  1. 创建隐藏表单
  2. 将它的计时器设置为 1
  3. 执行代码,并在计时器上关闭窗体

其他方法包括使用 ShellWScript.Shell 对象。

关于database - 使用 VBA 并行打开数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47658844/

相关文章:

sql-server - EXCEL SQL SELECT 无法识别 ThisWorkBook 中的字段名称

mysql - 如何制作一个 SQL 来创建一个报告,该报告选择所有带有 certian 行项目的报价,并包括另一个项目(如果它在该报价上)?

database - Django 模型 - 获取不同的值列表

C# 程序使用我的 Windows AD 身份验证连接到我的数据库,而不是我编码到其中的连接字符串。为什么?

java - 不创建或检索 JPA 条目

forms - 是否可以运行仅影响连续形式中的一行的 VBA 代码?

sql - MS Access - 如何增加不同表中的数字?

vba - 用户窗体中的全局变量

ms-access - Access VBA - 为声明为 long 的函数返回某种空白/空值

html - 如何在使用vba抓取网页后删除引号