ms-access - 从 VB Access 调用 UDF(Sql 服务器) "Undefined function <function name> in expression"

标签 ms-access sql-server-2008-r2 vba ms-access-2010

我正在尝试从 Access 中的 Vb 代码调用 udf(SQL 服务器)。与数据库的连接成功,我能够在 SQL Server 表上运行查询。但是,当我尝试调用 UDF 时,它会抛出一个错误,提示 未定义函数

请参阅下面的代码:

Private Sub cmd_Login_Click()
    ' some code here
    Set db = CurrentDb()

    sSQL = "SELECT UserID FROM TBL_User_Login WHERE UserName = '" & cbo_User & "' AND Status = 0"
    Set recset = db.OpenRecordset(sSQL)


    recset.Close
    Set rectset = Nothing

    sSQL = "SELECT fn_validate_user(" & gb_UserId & ",'" & Hash(Me.txt_Password + cbo_User) & "') AS PasswordValid"
    Set recset = db.OpenRecordset(sSQL)  ' this is where i get error for undefined function fn_validate_user
    PasswordValid = recset("PasswordValid")

有人可以看看我是否在这里遗漏了一些东西。

最佳答案

当您在 Access 中运行标准查询时,它首先由 Access 数据库引擎处理,即使该查询引用 ODBC 链接表也是如此。 Access 可以识别 Access 用户定义的函数(使用 VBA 创建),但不识别 SQL Server 用户定义的函数。

为了使用 SQL Server 用户定义函数,您需要使用传递查询。顾名思义,它绕过 Access 数据库引擎并将查询直接发送到远程数据库(通过 ODBC)。执行此操作的 VBA 代码如下所示:

Dim db As DAO.Database, qdf As DAO.QueryDef, recset As DAO.Recordset
Dim sSQL As String, PasswordValid As Boolean
Set db = CurrentDb
sSQL = "SELECT fn_validate_user(" & gb_UserId & ",'" & Hash(Me.txt_Password + cbo_User) & "') AS PasswordValid"
Set qdf = db.CreateQueryDef("")
' get .Connect property from existing ODBC linked table
qdf.Connect = db.TableDefs("TBL_User_Login").Connect
qdf.ReturnsRecords = True
qdf.SQL = sSQL
Set recset = qdf.OpenRecordset(dbOpenSnapshot)
PasswordValid = recset.Fields("PasswordValid").Value
recset.Close
Set recset = Nothing
Set qdf = Nothing

关于ms-access - 从 VB Access 调用 UDF(Sql 服务器) "Undefined function <function name> in expression",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29388885/

相关文章:

ms-access - MS Access 无法链接到加密的后端数据库

java - 将 Java 连接到网络驱动器上的 Access DB

performance - 部署在 Azure 上的服务速度极慢

vba - 以结构化方式命名全局变量

即使我提供了参数值,VBA 仍要求提供参数值吗?

ms-access - 是否可以在Access中创建递归查询?

sql - 如何在 Microsoft Access 中通过 VBA 设置 INSERT SQL 查询的参数值?

sql - 记录 SSIS 变量表达式

c# - 将多个 SQL 文件合并为一个 SQL 文件

"paste"运行时出现VBA运行时错误438