Подскажите возможно ли выводить на каждом листе в excel разные результаты запроса из MySQL? И чтоб сам запрос был записан в первой строке листа, а уже ниже результаты запроса.
Возможно, - через хранимую процедуру на сервере MySql с передачей в нее текста запроса; - через макрос, который формирует команду подключения по данным листа эксель и обновляет данные на листе; - наверное есть еще варианты реализации...
Sub MySql(sh As Worksheet, Sql)
Dim Cn As Object
Dim Rs As Object
Dim i&
Set Cn = CreateObject("ADODB.Connection")
Cn.Open "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=localhost;" _
& " DATABASE=test;" _
& "UID=user;PWD=password; OPTION=3"
Set Rs = Cn.Execute(Sql)
For i = 0 To Rs.Fields.Count - 1
sh.Cells(2, i + 1).Value = Rs.Fields(i).Name
Next
sh.[a2].CurrentRegion.Offset(1, 0).ClearContents
sh.[a3].CopyFromRecordset Rs
End Sub
в модуль листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = [a1].Address Then
Call MySql(Target.Parent, Target.Value)
End If
End Sub
B.Key, Попробовал, но что то ругается "syntax error". Я правильно понимаю. Используя этот макрос,для подключения к mysql более никаких манипуляций не требуется? Или все же что то необходимо поставить?
Sub MySql(sh As Worksheet, Sql)
Dim Cn As Object
Dim Rs As Object
Dim i&
Set Cn = CreateObject("ADODB.Connection")
Cn.Open "Driver={MySQL ODBC 3.51 Driver};Server=srv;Database=test;User=tester;Password=test;Option=3;"
Set Rs = Cn.Execute(sSql)
For i = 0 To Rs.Fields.Count - 1
sh.Cells(2, i + 1).Value = Rs.Fields(i).Name
Next
sh.[a2].CurrentRegion.Offset(1, 0).ClearContents
sh.[a3].CopyFromRecordset Rs
End Sub
Понял в чем проблема. В MySQL таблице, во втором столбце, тип данных указан TEXT, если удаляю столбец или меняю тип данных на VARCHAR, то в excel все нормально выводится.
Спасибо, за помощь и ссылки. Последнее, как сделать так, чтоб данные запрашивались заново, при переходе от одного листа к другому. К примеру щелкнул я "лист1" он открываются и данные сразу заново запрашиваются из mysql, щелкнул "лист2" он так же сразу обновился. Сейчас чтоб обновить данные, необходимо начать редактировать ячейку a1.
JayBhagavan, не пойму куда вставить код или что заменить, вроде уже все перепробовал. Не обновляются результаты при заходе на лист.
Кнопочки бы крайне не хотелось. Надо чтоб открыл документ у тебя сразу свежие данные из mysql, перешел на другой лист там тоже все актуальное, изменил запрос, так же все обновилось.