2

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

在原帖后添加。

基于下面的结构,我需要将表中的描述获取到查询中的 CustomFunctionField 中,并且日期字段是连接。该表包含日期范围,并且查询在日期范围内具有特定日期。

--查询-- ID | 信息 | 日期 | 自定义函数字段

--表-- ID | 开始日期 | 结束日期 | 描述

以下是代码:

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
4

1 回答 1

1

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

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 快得多。

于 2012-11-13T17:35:37.590 回答