2010-12-22 76 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像這樣:

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

BTW名稱是保留字,不能在任何地方使用,就會造成難言的悲痛。

+0

謝謝,但我發現自己是一個更好的解決方案,解決了我的兩個問題。 – Anonymous 2010-12-22 22:07:04

+0

什麼是更好的解決方案?我認爲@ Remou是迄今爲止最簡單的,但我很樂意聽到更簡單的事情。如果你指的是你發佈的答案,那麼@ Remou的答案甚至不會更簡單或更容易,我認爲這絕對是一種不合標準且過於複雜的獲得結果的方式。 – 2010-12-24 02:42:11

1

我用更少的代碼做了它:

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

現在,如果大家有同樣的問題,只需使用:

rst![name_of_the_row_in_your_table] 

在我而言,這是整片:

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