vba - MS Access VBA 函数导致查询加载缓慢

标签 vba ms-access

我需要一些指导来提高代码效率。

Public Function fncVAT(ByVal tDate As Variant) As Variant

Dim strTDate As String
Dim strVat As String

tDate = CDate(Nz(tDate, 0))

strTDate = "#" & Format(tDate, "mm/dd/yyyy") & "#"
strVat = "SELECT TOP 1 Vat FROM Tax WHERE [EffectiveDate] <= " & strTDate & _
                " ORDER BY [EffectiveDate] DESC;"

    With CurrentDb.OpenRecordset(strVat)
        If Not (.BOF And .EOF) Then
            fncVAT = .Fields(0)
        End If
    End With

End Function

它的作用是根据产品购买日期应用税表中的当前增值税税率。例如

税表

+----------------+-------+
| Effective Date |  VAT  |
+----------------+-------+
| 9/1/17         | 15%   |
| 2/1/19         | 12.5% |
+----------------+-------+

购买查询

+----------+---------+------+---------+---------------------------------------------------+
| PurDate  | Product | Cost | Vatable |                        Vat                        |
+----------+---------+------+---------+---------------------------------------------------+
| 1/31/18  | Cola    |   70 |       0 | IIf([Vatable]=0,[Cost]*fncVAT([PurDate]),0)=10.50 |
| 12/28/19 | Cola    |   70 |       0 | IIf([Vatable]=0,[Cost]*fncVAT([PurDate]),0)=8.75  |
| 5/3/20   | Flour   |   15 |      -1 | IIf([Vatable]=0,[Cost]*fncVAT([PurDate]),0)=0     |
+----------+---------+------+---------+---------------------------------------------------+

我已经将范围缩小到这个函数。该查询大约有 900 条记录,加载需要一段时间。有什么建议么?提前致谢。

最佳答案

最简单的方法可能是修改您的增值税表,这样它不仅有每个纳税期的开始日期,还有结束日期。
当然,当前汇率的 EndDate 还不知道,所以使用 max value那里。

+-----------+------------+-------+
| StartDate |  EndDate   |  VAT  |
+-----------+------------+-------+
| 9/1/17    | 2/1/19     | 15%   |
| 2/1/19    | 12/31/9999 | 12.5% |
+-----------+------------+-------+

然后您可以在查询中找到带有 JOIN 的匹配增值税行,并且不再需要该函数:

SELECT p.PurDate, p.Product, p.Cost, p.Vatable,
  IIf(p.Vatable=0, p.Cost * v.VAT, 0) AS Vat
FROM tblProduct p INNER JOIN Vat v 
ON (p.PurDate >= v.StartDate) AND (p.PurDate < v.EndDate)

这应该能提供不错的性能。

注意连接中的 >= 和 <(不是 <=)。
因此,要填充 EndDate 列,您只需将 StartDate block 向上复制一行即可。

关于vba - MS Access VBA 函数导致查询加载缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63894804/

相关文章:

vba - 关闭立即窗口 - VBA

java - SQL异常: Unexpected Token - UCanAccess

vba - 将 now() 转换为 MS Access VBA 中的特定格式

ms-access - 编译或反编译 MS Access MDB 文件有什么作用?

excel - 从模板创建工作表

python-docx 用 MySQL 数据生成文档

vba - Multi-Tenancy HANA 数据库的 ODBC 连接字符串

Excel VBA ActiveWindow.Visible 隐藏错误的工作簿

sql - 使用sql命令只返回表中奇数个数的记录

SQL 四舍五入到最接近的百分之一