#ms-access
#ms-access
Вопрос:
Этот вопрос задавался ранее. Я скорректировал свой код (ниже) на основе того, что я понял из исследований по этой теме. Однако мой код разбивается на строки, выделенные жирным шрифтом ниже.
У меня есть форма ( PBCIncSum
), в которой пользователь может ввести критерии даты начала и окончания запроса RstName
. Эта функция предназначена для вычисления значений 95-го процентиля для данных, находящихся в запросе RstName
. Когда я запускаю код, я получаю ошибку времени выполнения ‘3061: слишком мало параметров. Ожидаемый 2. Что я делаю не так? Провел три дня, глядя на этот код без какого-либо решения.
Public Function PercentileRst(RstName As String, fldName As String, PercentileValue As Double) As Double
'This function will calculate the percentile of a recordset.
'The field must be a number value and the percentile has to
'be between 0 and 1.
If PercentileValue < 0 Or PercentileValue > 1 Then
MsgBox "Percentile must be between 0 and 1", vbOKOnly
End If
Dim PercentileTemp As Double
Dim dbs As DAO.Database
Set dbs = CurrentDb
Dim xVal As Double
Dim iRec As Long
Dim i As Long
Dim RstOrig As DAO.Recordset
Dim qdf As DAO.QueryDef
Dim prm As DAO.Parameter
Set qdf = dbs.QueryDefs(RstName)
qdf.Parameters(0) = Forms!PBCIncSum!StDate
qdf.Parameters(1) = Forms!PBCIncSum!EndDate
For Each prm In qdf.Parameters
prm = Eval(prm.Name)
Next prm
**Set RstOrig = CurrentDb.OpenRecordset(RstName, dbOpenDynaset)**
RstOrig.Sort = fldName
Dim RstSorted As DAO.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
Set qdf = Nothing
PercentileRst = PercentileTemp
Завершить функцию
Комментарии:
1. У меня есть следующий вопрос. Как мне вычислить процентиль только для ненулевых или ненулевых значений?
Ответ №1:
Что я делаю не так?
Вы пытаетесь использовать CurrentDb.OpenRecordset
для выполнения запроса. Вы создали объект QueryDef qdf
и определили его параметры, поэтому вам нужно использовать OpenRecordset
метод этого объекта QueryDef:
Set rstOrig = qdf.OpenRecordset
Комментарии:
1. Горд, спасибо за твой быстрый ответ. Когда я делаю то, что вы предложили, это выдает мне следующую ошибку в той же строке: ошибка времени выполнения ‘3001’: недопустимый аргумент. Сунил.
2. Я попробовал следующий код, и он сработал!!! Спасибо за вашу помощь !!! 🙂
3. Установите rstOrig = qdf.OpenRecordset()