在Access中运行标准查询时,它首先由Access数据库引擎处理,即使该查询引用ODBC链接表。访问可以识别
通道
用户定义函数(使用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