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

时间:2018-03-02 16:59:28

标签: mysql vba ms-access-2013

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

1 个答案:

答案 0 :(得分:0)

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

为防止这种情况,您必须使用直通查询来绕过MDAC解析,其中sql-code按原样发送到MySQL。

有两种选择。

  1. Tim建议使用ADO而不是DAO。这是专业人士使用的推荐选项(我仍然主要使用DAO,但ADO是我的技能列表 - 接下来的收益)。

  2. 或继续使用DAO并按照sql-server-passthrough-query-as-basis-for-a-dao-recordset-in-access中的说明创建Query-Def 戈德汤普森。

  3. 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