首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义函数太慢

自定义函数太慢
EN

Stack Overflow用户
提问于 2012-11-13 17:04:50
回答 1查看 303关注 0票数 2

我已经创建了一个用于查询的自定义函数。该函数打开一个小表(50个单元格),并根据查找结果将日期添加到查询中的一个列中。不过,函数执行得太慢了,我认为这可能是因为我打开并关闭了查询中每个记录的记录集。是否有办法避免每次调用函数时打开记录集并关闭记录集?我怀疑这违背了最初使用函数的目的,但我希望有人有一个解决方案。

在原始帖子之后添加.

根据下面的结构,我需要将表中的描述输入到查询中的CustomFunctionField中,日期字段是连接。表保存日期范围,查询在日期范围内有特定日期。

-查询- ID \##.

-表-- ID = StartDate \ EndDate \\说明

以下是守则:

代码语言:javascript
复制
Public Function SelectTerm(DateFull)

    Dim rstin As DAO.Recordset
    Dim dx As Date
    Dim dterm As String

    Set rstin = CurrentDb.OpenRecordset("tblTerms", dbOpenSnapshot)

    dx = "1/1/2000"

    If Not rstin.EOF And Not rstin.BOF Then
        Do Until rstin.EOF Or dx >= DateFull
            dx = rstin.Fields("DateEnd")
            rstin.MoveNext
        Loop

        rstin.MovePrevious
        dterm = rstin.Fields("Description")
        rstin.Close
    End If

    SelectTerm = dterm

End Function
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-13 17:35:37

使用关联子查询根据主表中的日期/时间字段DateFull查找来自DateFull的术语描述。

代码语言:javascript
复制
SELECT
    y.DateFull,
    (
        SELECT TOP 1 [Description]
        FROM tblTerms
        WHERE DateEnd <= y.DateFull
        ORDER BY DateEnd DESC
    ) AS term_description
FROM YourTable AS y;

相关的子查询并不以出色的性能而为人所知。但是,这种方法应该比打开记录集并在行中移动的UDF快得多,直到找到所需的值为止。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13365258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档