You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接外部SQL数据库后Access内置DCount函数返回异常如何解决

问题根因

该异常由Access内置域聚合函数的缓存机制导致:

  • 自行创建的独立localDbConn ADODB连接执行本地表插入操作后,变更未同步到Access内置数据库缓存
  • DCount属于Access内置域聚合函数,默认读取缓存数据,因此返回Clear_Analysis执行后的旧结果(记录数为0)
  • 单独通过按钮调用时,Access已自动完成缓存刷新,因此返回结果正常
可行解决方案

以下方案任选其一即可解决问题:

方案1:替换本地连接为Access内置连接

删除自行创建localDbConn的相关代码,直接使用Access内置的CurrentProject.Connection执行插入操作,插入变更会自动同步到缓存,DCount可正常读取最新数据:

' 替换原来新建localDbConn的3行代码
Set localDbConn = CurrentProject.Connection

内置连接无需手动关闭。

方案2:插入完成后强制刷新缓存

所有插入操作执行完成后、调用Analysis_Check前,添加一行代码强制刷新Access数据库缓存:

DBEngine.Idle dbRefreshCache

刷新后再调用Analysis_Check即可获取最新记录数。

方案3:弃用DCount,直接通过ADODB连接查询计数

直接复用localDbConn执行计数查询,不走域函数缓存,结果完全准确,同时可优化Analysis_Check减少重复查询:

' 优化后的Analysis_Check函数
Function Analysis_Check(conn As ADODB.Connection)
    Dim recordCnt As Long
    recordCnt = conn.Execute("SELECT COUNT(*) FROM tbl_Analysis")(0)
    If recordCnt = 0 Then
        MsgBox "No Records!"
    Else
        MsgBox "Success!"
    End If
End Function

调用时传入当前使用的本地连接即可:Call Analysis_Check(localDbConn)

内容的提问来源于stack exchange,提问作者Mark Bakker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:06:03