2

クエリで使用されるカスタム関数を作成しました。この関数は小さなテーブル (50 セル) を開き、検索結果に基づいてクエリの 1 つの列に日付を追加します。ただし、関数の実行が遅すぎるのは、クエリ内のすべてのレコードに対してレコード セットを開いたり閉じたりするためだと思います。関数が呼び出されるたびにレコード セットを開いたり閉じたりするのを避ける方法はありますか? これはそもそも関数を使用する目的に反していると思いますが、誰かが解決策を持っていることを望んでいます。

元の投稿の後に追加されました。

以下の構造に基づいて、テーブルから説明をクエリの CustomFunctionField に取得する必要があり、日付フィールドが接続されます。テーブルには日付範囲が保持され、クエリには日付範囲内の特定の日付があります。

--クエリ-- ID | 情報 | 日付 | CustomFunctionField

--表-- 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 に答える