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

PHP通过MS Access ODBC驱动执行SQL时DLookUp函数运行异常问题

问题原因

DLookUp属于Access应用层内置的VBA域聚合函数,仅在Access程序宿主环境内运行查询时可被解析调用。通过ODBC驱动访问Access数据库时,调用链仅对接Jet/ACE数据库引擎,该引擎本身不识别VBA层的自定义函数,因此会出现执行异常、返回结果错误的问题。
你提到的部分JOIN子句异常的常见诱因:当前SQL中使用反引号(`)包裹表名、字段名,该语法不是Access SQL的标准语法,仅在Access程序内部做了兼容处理,ODBC调用时大概率会解析失败,建议统一替换为Access标准的方括号([])包裹标识符。

解决方案

你要实现的需求完全可以通过新增关联表替代DLookUp,无需使用域函数,修改后的SQL参考如下:

SELECT pq.QText, wr.The_Answer, wr.webtmporders_detail_ID, apq.IsStatement AS OnlyAStatement
FROM [tbl_Preference_Questions] pq
INNER JOIN [tblwebtmporders_detail_Requests] wr ON pq.PQ_ID = wr.PQ_ID
-- 关联原DLookUp查询的表获取IsStatement字段
LEFT JOIN [tbl_Activities_Preference_Questions] apq ON apq.PQ_ID = wr.PQ_ID
WHERE wr.webtmporders_detail_ID = 76884
ORDER BY wr.SortOrder

关联之后直接取apq.IsStatement字段即可,和你原来用DLookUp拿到的结果完全一致,且该SQL完全由数据库引擎原生支持,ODBC调用不会出现异常。

内容的提问来源于stack exchange,提问作者Robert Bryan Davis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:45:00