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
相关产品推荐
相关产品推荐

