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

通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:35:04