Access前端连接SQL Server后端更新表出现查询超时如何解决
Access前端对接SQL Server后端更新查询超时问题排查
基础场景
采用Access作为前端、SQL Server作为后端的架构,运行简单更新查询时出现调用异常。
相关代码
执行的更新查询
PARAMETERS ParamTransactionID Long, ParamVoidFlag Short; UPDATE tblTransaction SET tblTransaction.VoidInProgressFlag = [ParamVoidFlag] WHERE (tblTransaction.TransactionID=[ParamTransactionID]);
调用查询的VBA代码
Set qdef = CurrentDb.QueryDefs("qUPD-tblTransaction_VoidInProgress") qdef.Parameters![ParamVoidFlag] = VoidFlag qdef.Parameters![ParamTransactionID] = TransactionID qdef.Execute dbFailOnError + dbSeeChanges qdef.Close
报错信息
[Microsoft][ODBC SQL Server Driver]Query timeout expired ODBC--update on a linked table 'tblTransaction' failed.
已知异常特征
- 直接编辑tblTransaction表可正常操作
- 手动打开查询传入参数可正常运行
- 从应用代码中调用查询始终失败
排查进展
排查更新1
- 排除代码问题:删除关联视图无影响,旧版本代码也复现相同报错
- 初步怀疑与此前对tblTransaction的小幅度修改有关,待验证问题范围是仅该表还是全库
- 核心异常点:直接运行查询可正常执行,通过代码运行结果存在差异
排查更新2
- 排除全库只读可能性:其他表单可正常更新对应数据库表
- 缩小问题范围:异常仅与tblTransaction表有关,手动运行该更新查询仍然正常
排查更新3
- 简化测试验证:直接从主菜单表单运行查询,在原数据库schema下运行正常;将表中NTEXT类型替换为VARCHAR(MAX)后也可正常运行,切回原表仍然正常
- 根因定位方向:走完所有业务表单流程后才会报错,判断问题和某个处于打开状态的表单有关,该结论可解释直接运行查询正常、从表单中调用失败的差异,目前暂无法在对应表单打开时运行查询验证
内容的提问来源于stack exchange,提问作者BWhite
相关产品推荐
相关产品推荐

