如何在VBA中的MS Access 2007中执行已保存的查询?
我不想将SQL复制并粘贴到VBA中。我只是执行查询的名称。
这不起作用...... VBA无法找到查询。
CurrentDb.Execute queryname
答案 0 :(得分:35)
您可以通过以下方式执行此操作:
DoCmd.OpenQuery "yourQueryName", acViewNormal, acEdit
OR
CurrentDb.OpenRecordset("yourQueryName")
答案 1 :(得分:10)
您应该调查为什么VBA无法找到 queryname 。
我有一个名为 qryAddLoginfoRow 的已保存查询。它将当前时间的一行插入到我的 loginfo 表中。 CurrentDb.Execute
按名称调用时,该查询成功运行。
CurrentDb.Execute "qryAddLoginfoRow"
我的猜测是 queryname 是一个变量,其中包含当前数据库的QueryDefs集合中不存在的查询名称,或者 queryname 是现有查询的文字名称,但您没有将其括在引号中。
修改强>:
您需要找到一种方法来接受当前db的QueryDefs集合中不存在 queryname 。将这两行添加到CurrentDb.Execute
行之前的VBA代码中。
Debug.Print "queryname = '" & queryname & "'"
Debug.Print CurrentDb.QueryDefs(queryname).Name
这2行中的第二行将触发运行时错误3265," 此集合中找不到项目。"然后转到立即窗口,验证您要求CurrentDb
转到Execute
的查询的名称。
答案 2 :(得分:5)
To use CurrentDb.Execute, your query must be an action query, AND in quotes.
CurrentDb.Execute "queryname"
答案 3 :(得分:0)
在 MS Access VBA 中有两种运行操作查询的方法:
DoCmd.OpenQuery
语句。这使您可以控制这些警告:但是!请记住,即使在函数完成后,DoCmd.SetWarnings 仍将保持设置。这意味着您需要确保将其置于适合您需求的状态
Function RunActionQuery(QueryName As String)
On Error GoTo Hell 'Set Error Hanlder
DoCmd.SetWarnings True 'Turn On Warnings
DoCmd.OpenQuery QueryName 'Execute Action Query
DoCmd.SetWarnings False 'Turn On Warnings
Exit Function
Hell:
If Err.Number = 2501 Then 'If Query Was Canceled
MsgBox Err.Description, vbInformation
Else 'Everything else
MsgBox Err.Description, vbCritical
End If
End Function
CurrentDb.Execute
方法。这使您可以保持操作查询失败
掌握之中。 SetWarnings 标志不影响它。查询总是在没有警告的情况下执行。Function RunActionQuery()
'To Catch the Query Error use dbFailOnError option
On Error GoTo Hell
CurrentDb.Execute "Query1", dbFailOnError
Exit Function
Hell:
Debug.Print Err.Description
End Function
值得注意的是,dbFailOnError
选项仅响应数据处理失败。如果 Query 包含错误(例如拼写错误),则会生成运行时错误,即使未指定此选项
此外,如果您的查询需要更长的时间,您可以使用 DoCmd.Hourglass True
和 DoCmd.Hourglass False
来控制鼠标指针