Я пытаюсь добавить значение переменной, основанное на значении ячейки A2 в Sheet1 моей книги Excel, в следующий запрос MySQL в редакторе запросов:
SELECT o.Name, o.OrganizationId
FROM Organization AS o
WHERE o.OrganizationId = Sheet1!A2
ORDER BY o.Name ASC
Я пытался использовать пользовательский параметр, но он не работает с запросами MySQL.
Еще я попробовал выполнить запрос через скрипт VBA:
Sub VoucherQuery()
queryString = "SELECT Name, OrganizationId FROM [Vouchers!$A1:B1000000]
WHERE OrganizationId=" & Worksheets("Sheet1").Range("A2").Value
End Sub
Но не смог объединить это с запросом, который я посмотрел.
Последняя попытка состояла в том, чтобы я создал новую книгу Workbook и Get Data from Workbook, где я извлек данные из Workbook с исходным запросом SQL (тот же запрос, что и выше, без предложения WHERE), и попытался добавить условие, но я не смог Не могу найти код для редактирования с таким способом извлечения данных.
Кто-нибудь знает, как добиться этого с помощью Get Data → From MySQL Database Query Editor в Excel?
Не уверен насчет редактора запросов, но этот макрос должен работать в вашей ситуации.
Нужно просто заполнить информацию о вашем соединении под комментарием "fill these out below"
и заменить schema
фактической схемой в строке запроса.
Sub SendQuery()
Dim conn As Object
Dim rs1 As Object
Dim sqlstr As String
Dim val, server_name, database_name, user_id, password As String
Set conn = CreateObject("ADODB.Connection")
Set rs1 = CreateObject("ADODB.Recordset")
val = Trim(CStr(ThisWorkbook.Worksheets("Sheet1").Range("A2").Value))
' fill these out below
server_name = ""
database_name = ""
user_id = ""
password = ""
' connect to database
conn.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name _
& ";UID=" & user_id _
& ";PWD=" & password _
& ";OPTION=3"
' setup select string
sqlstr = "SELECT o.Name, o.OrganizationId FROM schema.Organization As o WHERE o.OrganizationId = '" & val & "' ORDER BY o.Name ASC"
' send query
rs1.Open sqlstr, conn, adOpenStatic
' copy data to sheet
With ThisWorkbook.Worksheets("Sheet1").Cells(1, 1)
.ClearContents
.CopyFromRecordset rs1
End With
' cleanup
rs1.Close
Set rs1 = Nothing
End Sub