Я написал функцию (см. Ниже), которая запрашивает внешнюю базу данных MySQL, настроенную на AWS, и возвращает одно значение.Он отлично работает - как я и хотел на самом деле - за исключением того, что он довольно медленный.Если вы просто используете функцию в электронной таблице один раз, это нормально, но если вы хотите вытянуть, скажем, 10 различных чисел из вашей базы данных в вашу электронную таблицу, есть досадная пауза в несколько секунд (15?), Пока все они обновляются.,Это не конец света, но кажется, что это может / должно быть быстрее.
Я задавался вопросом, была ли проблема в том, что я открывал новое соединение с БД каждый раз, когда я запускал функцию, поэтому япопытался разделить процесс на Sub, который подключается к БД, и функцию, которая просто отправляет запросы (см. далее ниже).Я решил запустить подпрограмму «Подключить» один раз, когда я впервые открыл электронную таблицу, а затем использовал функцию запросов по мере необходимости, но это не сработало вообще.Я только что получил «# ЗНАЧЕНИЕ» в любой ячейке, которая включала функцию.
Я понимаю, что это довольно открытый вопрос, и я прошу прощения, но я в тупике, и я подумал, что кто-то на stackoverflow может иметь некоторые хорошие предложения.Просто кажется, что это должно быть быстрее, чем есть.Наверное, само собой разумеется, но: я новичок в VBA и нахожу это довольно вялым и запутанным.
Исходная функция:
Public Function Quer(Param1 As String, Param2 As String, Param3 As String)
Dim Conn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim connstring As String
Set Conn = New ADODB.Connection
connstring = "connection string"
Conn.Open connstring
Dim querystring1 As String
querystring1 = "Select " & Param1 & " FROM table WHERE Param2 = " & Param2 & " AND Param3 = " & Param3
Set rs1 = New ADODB.Recordset
rs1.Open querystring1, Conn
Record = rs1.GetRows
Quer = Record(0, 0)
End Function
Как я уже говорил, вышеприведенная функция работает нормально, просто медленно.
Моя «вторая попытка» была следующей: попытка разделить соединение с основной базой данных и отдельные запросы.Насколько я мог судить, это был полный провал, но, возможно, есть какое-то простое исправление, которое я пропустил.Или это имеет значение?Будет ли этот подход более быстрым, даже если он сработает?
Sub Connect()
Dim Conn As ADODB.Connection
Dim connstring As String
Set Conn = New ADODB.Connection
connstring = "connection string"
Conn.Open connstring
End Sub
Public Function Quer(Param1 As String, Param2 As String, Param3 As String)
Dim querystring1 As String
Dim rs1 As ADODB.Recordset
querystring1 = "Select " & Param1 & " FROM table WHERE Param2 = " & Param2 & " AND Param3 = " & Param3
Set rs1 = New ADODB.Recordset
rs1.Open querystring1, Conn
Record = rs1.GetRows
Quer = Record(0, 0)
End Function
Любые мысли или предложения будут высоко оценены.