问题:我有一个表单 (frm_input),用户可以在其中输入人口范围。一旦用户输入范围的最小值和最大值并单击“确定”按钮,这些值就会输入到查询 (qryMasterQuery) 中,并使用引用表单中字段的“Between”语句基于这些输入运行查询.
“确定”按钮还会打开另一个表单“frm_output”。此表单运行一个函数“percentile”,用于计算查询中数据的百分位数。该函数传递三个参数——查询名称、查询中计算百分位数的字段和计算百分位数。
当我从查询中省略“之间”语句时,函数和表单运行良好。当我试图将它们结合在一起时,我在 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
我将永远感激任何帮助,因为我即将把我的头撞到墙上。