2013-03-20 2 views
0
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 

안녕 는 단순히 액세스 VBA에서 쿼리를 실행하고 런타임 오류 '3012'개체 MyQueryName 이미 라인에 존재를 얻고 유지하기 위해 노력하고 나는 없었습니다 :런타임 오류 3012 VBA 액세스 DB

Set qd = Nothing 

그리고 이것이 문제라고 생각했습니다. 그러나 그것을 추가 한 후에 나는 여전히 오류를 얻었고 qd 객체의 오류로 폭탄을 터뜨렸을 때 아마도 아직 지워지지 않았으므로이 두 행을 주석으로 처리하여 객체를 우회하여 곧바로 진행한다는 것을 기억했습니다. 재설정 :

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

하지만 나중에 나에게도이 오류가 표시됩니다. 혼란 스럽다 등!

의견이 있으십니까?

감사

앤드류

답변

0

일이 이미 존재하는 경우 쿼리를 만들 수 없습니다. 당신은 존재하는 않는 것을 먼저 확인 쿼리를 삭제하거나, 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 
+0

를? 나는 내가보아야하는 물건의 연장으로부터 이해하는 것 같지 않습니다. 이 코드를 한 번 살펴보고 왜 매번 새로운 객체를 생성 할 수없는 이유는 무엇입니까? – Andrew

+0

나는 점검을 위해 예제를 올렸지. 그리워 했니? – Fionnuala

+1

처음에 거기에있는 것처럼 보이지 않았지만 지금은 감사합니다 – Andrew