2016-08-05 145 views
0

我有一個帶有文本字段和子窗體的訪問表單。文本字段是一個名爲myQuery的查詢的參數,子表單顯示myQuery的結果。訪問:使用DAO.recordset運行查詢,從另一個查詢中進行選擇

在VBA我要訪問更改爲MyQuery的第一排,所以我試圖用DAO.recordsets像這樣:

dim query as string 
dim rs as DAO.recordset 
query = "select top 1 * from myQuery" 
set rs=CurrentDb.OpenRecordset(query) 

我得到一個錯誤,說「參數太少」。

如果我去創建查詢選項卡,並運行SQL代碼「從myQuery中選擇頂部1 *」它的作品。我猜測,通過CurrentDb.OpenRecordset運行查詢時,您不能像使用常規SQL那樣將另一個查詢視爲表。如何使用OpenRecordset

Regards

+4

您保存的查詢引用了窗體上的控件,因此當您調用保存的查詢時,它會嘗試將「Forms!SomeForm!TextField」作爲參數進行計算,而不是查看實際控件本身。取消保存的查詢並將完整的查詢文本放入查詢字符串變量中。 –

+0

謝謝,通過一些調整,我能夠讓你的方法工作。 – Carl

+0

或者如果查詢足夠複雜以至於您不想將整個SQL放入VBA中,則可以使用以下命令:http://stackoverflow.com/a/32118340/3820271 – Andre

回答

1

考慮在打開記錄集之前使用querydef和評估參數。然而,在這個實例中沒有具體的SELECT表達式可以使用,但是整個查詢對象。 TOP 1可以通過選擇記錄集值而無需循環來進行鏡像(因爲它首先選取)。

Dim db As DAO.Database 
Dim qdf As DAO.querydef 
Dim rst As DAO.Recordset 

Set db = CurrentDb 
Set qdf = db.QueryDefs("myQuery") 
For Each prm In qdf.Parameters 
    prm.Value = Eval(prm.Name) 
Next prm 

Set rst = qdf.OpenRecordset(dbOpenDynaset) 
rst.MoveFirst 

Debug.Print rst.Fields(0), rst.Fields(1), rst.Fields(2), rst.Fields(3), rst.Fields(4) 
相關問題