我的mysql数据库中有一个函数。 我试图在VBA函数中调用我的VBA中的mysql函数,通过从表单传递参数来获得结果。 我无法弄明白该怎么做。 这就是我到目前为止所拥有的
function getval(Id As Long) As String
Dim strSQL As String
Dim rsTch As DAO.Recordset
strSQL = "SELECT getname(" & Id & ")"
Set rsTch = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
End Function
但我收到此错误
未定义的函数getname()
getname()
是我的mysql函数。我在mysql workbench中运行查询时得到了结果。
getval()
是我的VBA函数,我从中执行查询
id
是mysql函数的参数
请帮帮我
答案 0 :(得分:0)
它是MDAC-Engine(Jet),它在将SQL发送到MySQL之前解析它。引擎看到函数getname()
并在vba代码中查找它,但它不存在,因此引发了错误Undefined function getname()
。
为防止这种情况,您必须使用直通查询来绕过MDAC解析,其中sql-code按原样发送到MySQL。
有两种选择。
Tim建议使用ADO而不是DAO。这是专业人士使用的推荐选项(我仍然主要使用DAO,但ADO是我的技能列表 - 接下来的收益)。
或继续使用DAO并按照sql-server-passthrough-query-as-basis-for-a-dao-recordset-in-access中的说明创建Query-Def 戈德汤普森。
Function getval(Id As Long) As String
Dim strSQL As String
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
strSQL = "SELECT getname(" & Id & ")"
Set qdf = CurrentDb.CreateQueryDef("")
With qdf
.Connect = "ODBC;Driver={MySQL ODBC 5.3 ANSI Driver};" _
& "SERVER=Your Server;PORT=3306;DATABASE=Your Database;" _
& "USER=Your User;PASSWORD=1234;OPTION=3"
.SQL = strSQL
.ReturnsRecords = True
Set rst = .OpenRecordset
End With
Debug.Print rst(0)
rst.Close
Set rst = Nothing
Set qdf = Nothing
End Function