OpenQuery是RunSQL更新SELECT查询的好选择吗?

时间:2018-07-31 18:48:57

标签: access-vba

我当前正在编写一个Access宏,它将原始数据导入表中并执行一系列SELECT查询。我试图避免使用RunSQL,因为:

  1. SQL代码太长,导致我的VBA混乱。
  2. 我已经在数据库中建立了查询,因此RunSQL似乎是多余的。

我尝试了OpenQuery,它似乎可以满足我的要求。有人可以请您解释这两种方法之间的区别,以便我可以依靠它

2 个答案:

答案 0 :(得分:0)

如果您已构建查询,则简单的方法是:

Dim db As DAO.Database
Dim q as DAO.QueryDef

Set db = CurrentDb

Set q = db.QueryDefs("SomeQuery")
q.Execute()

Set q = db.QueryDefs("SomeOtherQuery")
q.Execute()

' etc.

答案 1 :(得分:0)

简而言之,使用VBA编写您自己的查询比打开预制查询具有更大的灵活性。 在VBA中组成查询的sql字符串,可以根据控件状态,变量等随时随地对其进行修改。

当然,这并非总是必要的,在许多情况下使用OpenQuery完全可以。

根据任务的不同,这两种方法的性能可能也会有所不同,但是很大程度上也取决于其他元素。

至于“混乱的” SQL代码:您可以对其进行控制。例如

strsql = "SELECT idUsr, strLogin, intDep FROM Users WHERE True "

If (condition1) then
    strsql = strsql & " And intDep>30"
else
    strsql = strsql & " And intDep<=30"
end if

'more conditions here
...

'set the order
If (condition9) then
    strsql = strsql & " ORDER BY idUsr, intDep"
Else
    strsql = strsql & " ORDER BY intDep, isUsr"
End If