Как я могу получить результат хранимой функции MySQL в коде VBA

0

У меня есть функция в моей базе данных mysql. Я пытаюсь вызвать функцию mysql в своем VBA внутри VBA funtion, чтобы получить результат, передав параметр из формы. Я не могу понять, как это сделать. Это то, что я до сих пор

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. Я получаю результат, когда я запускаю запрос в workbench mysql.

getval() - моя функция VBA, из которой я выполняю id запроса, является параметром функции mysql, пожалуйста, помогите мне

  • 0
    stackoverflow.com/questions/13558921/...
  • 0
    @TimWilliams Это не о подключении к MySQL. Теперь я могу выполнять свои sql запросы, кроме функций
Теги:
ms-access-2013

1 ответ

0

Это MDAC-Engine (Jet), который анализирует SQL перед отправкой в MySQL. Двигатель видит функцию getname() и ищет ее в vba-коде, но ее там нет, поэтому возникает ошибка Undefined function getname().

Чтобы этого избежать, вы должны обойти разбор MDAC, используя запрос-транзит, где SQL-код отправляется в MySQL как есть.

Есть два варианта.

  1. Используйте ADO вместо DAO, как предложил Тим. Это рекомендуемый вариант, используемый профессионалами (я по-прежнему в основном на DAO, но ADO находится поверх моего списка навыков - рядом с природой).

  2. или оставаться в DAO и создавать Query-Def, как описано в sql-server-passthrough-query-as-basis-for-a-dao-recordset-in-access от Gord Thompson.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню