我花了很多时间创建了24个不同的MS Access查询,并将它们保存在MS Access数据库中。它们必须以特定的顺序运行。
我想运行一个宏来一个接一个地执行它们。
我知道我可以使用VBA做到这一点,但我必须一次一个地将所有SQL复制到VBA中。
有没有一种方法可以让VBA只运行MS Access数据库中保存的查询,而不将它们复制到VBA中?
我对SQL很在行。15+年的Oracle工作,代码编写,数据库调优,数据数据库管理员的工作。
我刚开始使用SQL和VBA在MS Access DB上运行。
发布于 2019-05-30 05:44:21
在最简单的形式中,您可以定义Sub
,如下所示:
Sub ExecuteQueries()
With CurrentDb
.Execute "MyQuery1"
.Execute "MyQuery2"
'...
.Execute "MyQueryN"
End With
End Sub
或者,如果您打算从MS Access宏调用它,请将其定义为公共模块中的Function
。
发布于 2019-05-30 05:29:45
您可以执行以下操作来运行保存的查询:
Dim db As DAO.Database, qry As DAO.QueryDef
Set db = CurrentDb
Debug.Print "-- Start --"
For Each qry In db.QueryDefs
If qry.Name Like pattern Then
Debug.Print qry.Name,
qry.Execute
Debug.Print "(" & qry.RecordsAffected & ")"
End If
Next
Debug.Print "-- End --"
db.Close()
命名查询,使字母顺序与预期的执行顺序相匹配,例如01_deleteCustomers
、02_appendCustomers
、03_etc
。
如果要运行所有查询,请指定一个pattern
字符串或删除If
。
请注意,在Visual Basic编辑器中的菜单Tools
> References...
下,我选择了Microsoft DAO 3.6 Object Library
。(您可能有另一个版本)
发布于 2019-05-30 05:37:10
如果您没有特定的命名约定,请按执行顺序使用数组作为查询名称,以下是另一种方法:
Public Sub RunMasterUpdate()
Dim qryList As Variant
Dim i As Long
qryList = Array("QueryName1", "QueryName2", "QueryName3")
For i = LBound(qryList) To UBound(qryList)
CurrentDb.Execute qryList(i)
Next
End Sub
https://stackoverflow.com/questions/56368682
复制相似问题