KagamineLenKai2
V2EX  ›  问与答

求教,为什么我在 ACCESS 中使用自定义函数会提示“表达式中函数未定义”呢?

  •  
  •   KagamineLenKai2 · Oct 14, 2016 · 9622 views
    This topic created in 3518 days ago, the information mentioned may be changed or developed.

    我这里有一个报表需求,需要用 access 算出中位数,不过 access 并没有原生提供 median 函数,所以我就找了一个用 VB 实现的自定义函数,出处是这里
    Stack Overflow

    Function fMedian(SQLOrTable, GroupFieldName, GroupFieldValue, MedianFieldName)
    Dim rs As DAO.Recordset
    
    Set db = CurrentDb
    Set rs1 = db.OpenRecordset(SQLOrTable, dbOpenDynaset)
    
    If IsDate(GroupFieldValue) Then
        GroupFieldValue = "#" & GroupFieldValue & "#"
    ElseIf Not IsNumeric(GroupFieldValue) Then
        GroupFieldValue = "'" & Replace(GroupFieldValue, "'", "''") & "'"
    End If
    
    rs1.Filter = GroupFieldName & "=" & GroupFieldValue
    rs1.Sort = MedianFieldName
    
    Set rs = rs1.OpenRecordset()
    rs.Move (rs.RecordCount / 2)
    rs.MovePrevious
    
    If rs.RecordCount Mod 2 = 0 Then
        varMedian1 = rs.Fields(MedianFieldName)
        rs.MoveNext
        fMedian = (varMedian1 + rs.Fields(MedianFieldName)) / 2
    Else
        fMedian = rs.Fields(MedianFieldName)
    End If
    
    End Function
    

    原表的字段如下
    |结束时间年月日 |分公司 |计算时长之 First 之合计|状态 1|状态 2|日期|月份|集合|
    集合=分公司&状态 1&状态 2&月份,是一个辅助列
    想输出的表是这样的
    |集合|时效(计算时长之 First 之合计的中位数)|
    表达式如下

    时效: fMedian("5-8-1 新增放款时效(按分公司)","集合",[集合],"计算时长之 First 之合计")
    

    在 SQL 视图里看的话是这样

    SELECT [5-8-1 新增放款各环节时效基础表].集合月,
    fMedian("5-8-1 新增放款时效(按分公司)","集合",[集合],"计算时长之 First 之合计") AS 时效
    FROM [5-8-1 新增放款各环节时效基础表]
    GROUP BY [5-8-1 新增放款各环节时效基础表].集合;
    

    但是每次运行查询的时候 access 都会提示“表达式中'fMedian'函数未定义”,试了好多次也不知道问题在哪里,求指教 /(ㄒoㄒ)/~~

    2 replies    2016-10-14 15:21:21 +08:00
    KagamineLenKai2
        1
    KagamineLenKai2  
    OP
       Oct 14, 2016
    刚开了下 VBA 里的引用, Microsoft DAO 3.6 Object Library 没有勾选…但是勾上再点确定又会提示加载 DLL 错误……
    KagamineLenKai2
        2
    KagamineLenKai2  
    OP
       Oct 14, 2016
    又搜索了一下,貌似是说 Microsoft Access 16.0 Object Library 就能支持 DAO 运行,而这个 DAO3.6 好多年前就不更新了,新版 office 也不再支持了……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1145 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:18 · PVG 02:18 · LAX 11:18 · JFK 14:18
    ♥ Do have faith in what you're doing.