如何在VBA代码中获取mysql存储函数结果

问题描述 投票:0回答:1

我的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函数的参数请帮帮我

mysql vba ms-access-2013
1个回答
0
投票

它是MDAC-Engine(Jet),它在将SQL发送到MySQL之前对其进行解析。引擎看到函数getname()并在vba代码中查找它,但它不存在,所以引发错误Undefined function getname()

为了防止这种情况,您必须使用passthrough-query绕过MDAC解析,其中sql-code按原样发送到MySQL。

有两种选择。

  1. 蒂姆建议使用ADO而不是DAO。这是专业人士使用的推荐选项(我仍然主要使用DAO,但ADO位于我的技能列表之上 - 次要收益)。
  2. 或者继续使用DAO并创建一个Query-Def,如来自Gord Thompson的sql-server-passthrough-query-as-basis-for-a-dao-recordset-in-access所述。
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
© www.soinside.com 2019 - 2024. All rights reserved.