连接外部SQL数据库后Access内置DCount函数返回异常如何解决
问题根因
该异常由Access内置域聚合函数的缓存机制导致:
- 自行创建的独立
localDbConnADODB连接执行本地表插入操作后,变更未同步到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
相关产品推荐
相关产品推荐

