Я новичок в доступе и VBA. У меня есть функция, которую я использую для вычисления медианы. Текущая функция действует как функция домена и использует все данные для вычисления медианы, а не набора данных, который составляет остальную часть запроса/отчета. Я хотел бы знать, как изменить этот код или улучшить подход, чтобы найти медиану набора данных, используемого для создания отчета.Лучший подход VBA в доступе к медиане набора данных
Option Compare Database
Option Explicit
Function DMedian(tName As String, fldName As String) As Single
Dim MedianDB As DAO.Database
Dim ssMedian As DAO.Recordset
Dim RCount As Integer, i As Integer, x As Double, y As Double, _
OffSet As Integer
Set MedianDB = CurrentDb()
Set ssMedian = MedianDB.OpenRecordset("SELECT [" & fldName & _
"] FROM [" & tName & "] WHERE [" & fldName & _
"] IS NOT NULL ORDER BY [" & fldName & "];")
'NOTE: To include nulls when calculating the median value, omit
'WHERE [" & fldName & "] IS NOT NULL from the example.
ssMedian.MoveLast
RCount% = ssMedian.RecordCount
x = RCount Mod 2
If x <> 0 Then
OffSet = ((RCount + 1)/2) - 2
For i% = 0 To OffSet
ssMedian.MovePrevious
Next i
DMedian = ssMedian(fldName)
Else
OffSet = (RCount/2) - 2
For i = 0 To OffSet
ssMedian.MovePrevious
Next i
x = ssMedian(fldName)
ssMedian.MovePrevious
y = ssMedian(fldName)
DMedian = (x + y)/2
End If
If Not ssMedian Is Nothing Then
ssMedian.Close
Set ssMedian = Nothing
End If
Set MedianDB = Nothing
End Function
Интересный ответ, Мэтт. Я никогда не думал об этом с этой точки зрения. Я попытался использовать запрос, на котором основан отчет. Dmedian («qrySearch», «SoldPrice»). Сам отчет основан на том же запросе. Я получаю сообщение об ошибке в этой части кода: Set ssMedian = MedianDB.OpenRecordset ("SELECT [" & fldName & _ "] FROM [" & tName & "] WHERE [" & fldName & _ "] НЕ НУЖНО ЗАКАЗАТЬ ["& fldName & "];") – user1096276
Что такое сообщение об ошибке, которое вы получаете? Я заметил, что запрос называется «qrysearch», это не параметр-запрос? –
Я думаю, что это запрос параметра. поле находит значение текстового поля в форме с использованием LIKE. Ошибка имеет слишком мало параметров. – user1096276