2011-12-13 1 views
2

Я новичок в доступе и 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 

ответ

0

Если вы имеете в виду вычисление медианы в отношении пользовательского отчета, который вы создали, а затем просто сохранить запрос и передать имя запроса, чтобы «TName» вместо имени таблицы.

+0

Интересный ответ, Мэтт. Я никогда не думал об этом с этой точки зрения. Я попытался использовать запрос, на котором основан отчет. Dmedian («qrySearch», «SoldPrice»). Сам отчет основан на том же запросе. Я получаю сообщение об ошибке в этой части кода: Set ssMedian = MedianDB.OpenRecordset ("SELECT [" & fldName & _ "] FROM [" & tName & "] WHERE [" & fldName & _ "] НЕ НУЖНО ЗАКАЗАТЬ ["& fldName & "];") – user1096276

+0

Что такое сообщение об ошибке, которое вы получаете? Я заметил, что запрос называется «qrysearch», это не параметр-запрос? –

+0

Я думаю, что это запрос параметра. поле находит значение текстового поля в форме с использованием LIKE. Ошибка имеет слишком мало параметров. – user1096276

Смежные вопросы