2010-12-22 3 views
0

나는 내 양식에서이 쿼리를 가지고 :VBA를 통한 Microsoft Access 쿼리가 반복됩니까?

strSQL = "SELECT cityID FROM City WHERE Name =" & Chr(34) & Me.List60.Value & Chr(34) & ";" 
Set qdf = CurrentDb.CreateQueryDef("QueryCityName", strSQL) 
DoCmd.OpenQuery qdf.Name 
Me.cityID = qdf 

내가 뭘 다음 쿼리를 실행하고 싶어합니다 (List60 값이 동적)을하고 텍스트 상자에 결과를 할당합니다. 이제 처음에는 완벽하게 쿼리가 실행되고 두 번째 쿼리에서는 중복 쿼리에 대한 오류가 발생합니다 (사용 된 값으로 Querys에 저장된 새 쿼리가 있는지 확인합니다). 그래서 여기 내 질문 :

쿼리를 저장하지 않고 항상 동적으로 만드는 것을 피하려면 어떻게해야합니까? 이 쿼리의 결과를 텍스트 상자에 할당하는 방법 (예에서 qdf.Value가 작동하지 않음)?

답변

2

존재 여부를 확인하지 않고 쿼리를 작성하면 오류가 발생합니다. querydef를 참조하여 sql을 변경할 수 있으며 새 쿼리를 작성할 필요가 없습니다. 그러나이 상황에서는 DLookUp 만 쿼리 할 필요가 없습니다.

DLookUp("cityID", "City", "Name ='" & Replace(Me.List60.Value,"'","''") & "'") 

당신은 지금처럼을 DLookup TextBox 컨트롤 소스를 설정할 수 있습니다

=DLookUp("cityID", "City", "Name ='" & Replace(List60.Value,"'","''") & "'") 

이 BTW 이름

가 예약 된 단어입니다 어디서나 사용할 수 없습니다, 그것은 말할 수없는 슬픔의 원인이됩니다.

+0

고마워요.하지만 제 자신이 두 가지 문제를 해결하는 더 나은 해결책을 찾았습니다. – Anonymous

+0

더 나은 솔루션은 무엇입니까? 나는 @ Remou가 훨씬 간단하다고 생각하지만, 더 쉬운 것에 대해 듣고 싶습니다. 당신이 게시 한 답변을 언급하고 있다면, 그것은 @ Remu의 대답보다 더 간단하거나 더 가깝지도 않습니다. 그리고 나는 그것이 결과를 얻는데 분명히 표준 이하이고 단순한 방법이라고 생각합니다. –

1

나는 더 적은 코드로했다 : 모든 사람이 같은 문제가있는 경우

strSQL = "SELECT cityID FROM City WHERE Name =" & Chr(34) & Me.List60.Value & Chr(34) & ";" 
Set rst = CurrentDb.OpenRecordset(strSQL) 

지금 바로 사용

:

strSQL = "SELECT cityID FROM City WHERE Name =" & Chr(34) & Me.List60.Value & Chr(34) & ";" 
Set rst = CurrentDb.OpenRecordset(strSQL) 
Me.cityID = rst![cityID] 
: 내 경우

rst![name_of_the_row_in_your_table] 

이 전체 조각

+1

내가 제안한 해결책은 코드가 필요없고 코드가 사용되면 단 한 줄만 필요하다는 것을 알게 될 것입니다. – Fionnuala

+0

이 솔루션은 @ Remu의 답변보다 전혀 우수하지 않습니다. –

관련 문제