希望有人能幫助。我已經閱讀,似乎無法找到解決方案。OpenRecordSet參數設置太少4 QueryDefs問題
問題:我有一個表單(frm_input),用戶輸入一個人口範圍。一旦用戶輸入範圍的最小和最大值,並單擊「確定」按鈕,將值輸入到查詢(qryMasterQuery)中,並使用引用表單中的字段的'Between'語句根據這些輸入運行查詢。
「確定」按鈕還打開另一個窗體'frm_output'。此表單運行一個函數「百分比」,用於計算查詢中數據的百分位數。該函數傳遞三個參數 - 查詢名稱,用於計算百分位數的百分點查詢字段以及計算的百分位數。
當我省略查詢中的「between」語句時,函數和窗體運行良好。當我試圖將它們結合在一起時,我的OpenRecordset()函數收到了'太少的參數,4'。從我讀過的內容中,我需要明確聲明DAO.Querydef對象 並通過Querydef對象參數集合提供參數。
問題1:當我包括以下語句:
Set qdf = db.QueryDefs("qryMasterQuery")
我得到一個運行時424錯誤消息。
更大的問題2: 我仍然不清楚通過qdf.Paramaters提供參數的系列。我不想在查詢中聲明所有內容,只會傳遞給函數的內容,即'fldName'。
我的代碼如下:
Public Function PercentileRst(RstName As String, fldName As String, PercentileValue As Double) As Double
'This function will calculate the percentile of a recordset.
Dim PercentileTemp As Double
Dim dbs As DAO.database
Dim RstOrig As DAO.Recordset
Set dbs = CurrentDb
Dim xVal As Double
Dim iRec As Long
Dim i As Long
Set RstOrig = CurrentDb.OpenRecordset("qryMasterFee", dbOpenDynaset)
RstOrig.Sort = fldName
Dim RstSorted As Recordset
Set RstSorted = RstOrig.OpenRecordset()
RstSorted.MoveLast
RstSorted.MoveFirst
xVal = ((RstSorted.RecordCount - 1) * PercentileValue) + 1
'x now contains the record number we are looking for.
'Note x may not be whole number
iRec = Int(xVal)
xVal = xVal - iRec
'i now contains first record to look at and
'x contains diff to next record
RstSorted.Move iRec - 1
PercentileTemp = RstSorted(fldName)
If xVal > 0 Then
RstSorted.MoveNext
PercentileTemp = ((RstSorted(fldName) - PercentileTemp) * xVal) + PercentileTemp
End If
RstSorted.Close
RstOrig.Close
Set RstSorted = Nothing
Set RstOrig = Nothing
Set dbs = Nothing
PercentileRst = PercentileTemp
End Function
我永遠感激您的幫助,因爲我只是做了我撞頭在牆上。
謝謝!通過並提供參數解決了問題。我需要做的唯一其他更改是顯式聲明參數(而不是從表單中引用它們)。 – jimmyv41
如果查詢在該表單的模塊上作爲記錄集打開,則可以引用表單對象(如文本框)作爲參數。如果它回答你的問題,也請選擇我的答案。謝謝 :) – usncahill