1
Dim db As DAO.Database
Set db = CurrentDb()
Dim qd As DAO.QueryDef
Dim sqlQry As String

sqlQry = "SELECT x,y,z " & _
"INTO MyTable2 " & _
"FROM mytable1 " & _
"WHERE ((Condition1) And (Condition2)) "

Set qd = db.CreateQueryDef("MyQueryName", sqlQry) 
DoCmd.OpenQuery (qd.Name)
Set qd = Nothing
Set db = Nothing
End Sub 

您好我只是想在 Access VBA 中运行查询并不断收到运行时错误“3012”对象 MyQueryName 已存在于行:

Set qd = db.CreateQueryDef("MyQueryName", sqlQry)

现在我没有:

Set qd = Nothing

并认为这是问题所在。但是在添加它之后我仍然得到了错误然后我记得因为我在 qd 对象上出现了错误它可能还没有清除所以运行它并注释掉这两行所以它绕过并直接进入对象重置:

Set qd = db.CreateQueryDef("MyQueryName", sqlQry) 
DoCmd.OpenQuery (qd.Name)

但之后它仍然给我这个错误。难倒困惑等!

你们有什么想法吗?

谢谢

安德鲁

4

1 回答 1

1

当查询已存在时,您无法创建查询。您可以删除查询,首先检查它是否存在,或者您可以更新 sql

db.QueryDefs("MyQueryName").SQL= sqlQry

所以:

If DLookup("Name", "MSysObjects", "Name= 'MyQueryName'") <> "" Then
    Set qdf = CurrentDb.QueryDefs("MyQueryName")
    qdf.SQL = sqlQry
Else
    Set qdf = CurrentDb.CreateQueryDef("MyQueryName", sqlQry)
End If
于 2013-03-20T16:45:29.243 回答