通过ODBC连接Access与PHP,能否调用Access中VBA自定义函数?
问题解答
核心结论
无法通过ODBC连接直接调用Access数据库中编写的VBA自定义函数。ODBC驱动仅支持识别Access内置的SQL函数,无法解析执行VBA模块内的自定义函数,这正是你触发Undefined function 'GetUserName'错误的原因。
替代方案
你可以通过以下两种方式实现需求:
1. 在PHP中直接获取用户名
既然你的VBA函数作用是获取系统用户名,完全可以在PHP中直接实现,不必依赖Access:
$username = getenv('username'); // 执行查询并附加用户名 $con = odbc_connect("Driver={Microsoft Access Driver(*.mdb, *.accdb)};Dbq=\\sha\\test\\Main_be.accdb","",""); $sql = "select ID from ft"; $rs = odbc_exec($con , $sql); // 遍历结果时添加用户名字段 while($row = odbc_fetch_array($rs)){ $row['username'] = $username; // 后续处理数据逻辑 }
2. 在Access中创建预存查询嵌入函数
如果需要在Access层面处理逻辑,可以在Access里创建一个保存的查询,将自定义函数写入查询语句:
-- 在Access中创建保存查询,命名为qryFTWithUserName SELECT ID, GetUserName() AS username FROM ft;
之后在PHP中直接调用这个预存查询:
$con = odbc_connect("Driver={Microsoft Access Driver(*.mdb, *.accdb)};Dbq=\\sha\\test\\Main_be.accdb","",""); $sql = "SELECT * FROM qryFTWithUserName"; $rs = odbc_exec($con , $sql);
这种方式下,Access会在内部执行查询时调用自身的VBA函数,ODBC只需读取最终的查询结果即可。
内容的提问来源于stack exchange,提问作者Arya Basiri
相关产品推荐
相关产品推荐

