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オブジェクトでエラーが発生したため、おそらくまだクリアされていないことを思い出したので、これらの2行をコメントアウトして実行し、バイパスしてオブジェクトに直行しましたリセット:

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

しかし、その後もこのエラーが発生します。困惑などなど!

皆さんからのアイデアはありますか?

ありがとう

アンドリュー

4

1 に答える 1

1

You cannot create a query when one already exists. You can delete the query, checking first that it does exists, or you can update the sql

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

So:

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 に答える