Страницы: 1
RSS
Разные запросы из MySQL на разных листах.
 
Подскажите возможно ли выводить на каждом листе в excel разные результаты запроса из MySQL?
И чтоб сам запрос был записан в первой строке листа, а уже ниже результаты запроса.

То чего хочется во вложении.
Изменено: Jesprit - 09.02.2016 12:43:54
 
Тема актуальна для меня, возможно я как то непонятно сформулировал вопрос?

Или это невозможно реализовать в excel?
 
Возможно,
- через хранимую процедуру на сервере 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 - 10.02.2016 11:41:25
 
B.Key, Попробовал, но что то ругается "syntax error".
Я правильно понимаю. Используя этот макрос,для подключения к mysql более никаких манипуляций не требуется? Или все же что то необходимо поставить?
Изменено: Jesprit - 10.02.2016 09:05:11
 
Проверьте для начала строку подключения, установлен ли указанный драйвер
Цитата
B.Key написал:
"DRIVER={MySQL ODBC 3.51 Driver};"
Возможно потребуется изменить строку в соответствие с Синтаксис строк подключения
Неизлечимых болезней нет, есть неизлечимые люди.
 
Перепроверил, скачал отсюда https://dev.mysql.com/downloads/connector/odbc/3.51.html и установил.
Ошибка остается.

А вот это в 16 строке:
Код
End Sub]
Не ошибка? Если убираю ] то получаю вот такое сообщение:
 
похоже, что код из #4 не соответствует синтаксису VBA, Вы бы показали какой у Вас получился
Изменено: TheBestOfTheBest - 10.02.2016 11:28:53
Неизлечимых болезней нет, есть неизлечимые люди.
 
Сейчас вот так.
Код
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
И ругается вот на эту строку:
Код
Set Rs = Cn.Execute(sSql)
 
А запрос точно есть в А1 ?
да там есть ошибка в коде
sSql надо sql
Ошибку в коде исправил в своем сообщении
Изменено: B.Key - 10.02.2016 11:42:07
 
Вот...заработало, но берет только первый столбец из MySQL остального нет.
И нету названия столбцов, что тоже не очень удобно.
Изменено: Jesprit - 10.02.2016 11:46:24
 
должен выдавать все что указано в запросе
 
попробуйте  option поставить 2
хотя 3 это (2 и 1)
подробно тут
 
Запрос простой: select * from test
В таблице test 9 столбцов.
В excel заполняется только столбец A данными из первого столбца MySQL

А если сделать например вот такой запрос:
select title,img,url,tags,site from test
То данные выдает, все какие должны быть.
 
Понял в чем проблема.
В MySQL таблице, во втором столбце, тип данных указан TEXT, если удаляю столбец или меняю тип данных на VARCHAR, то в excel все нормально выводится.

Как бы еще забирать названия столбцов и mysql?
Изменено: Jesprit - 10.02.2016 12:05:53
 
не знаю поможет ли :)
попробуйте так
Код
select t.* from test t
 
Цитата
Jesprit написал: Как бы еще забирать названия столбцов и mysql?
Изучайте ADO
 
Спасибо, за помощь и ссылки.
Последнее, как сделать так, чтоб данные запрашивались заново, при переходе от одного листа к другому.
К примеру щелкнул я "лист1" он открываются и данные сразу заново запрашиваются из mysql, щелкнул "лист2" он так же сразу обновился.
Сейчас чтоб обновить данные, необходимо начать редактировать ячейку a1.
 
Код
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
лучше сделайте кнопку на каждом листе или на ленту вынесите и обновляйте по ее нажатию.
 
JayBhagavan, не пойму куда вставить код или что заменить, вроде уже все перепробовал. Не обновляются результаты при заходе на лист.

Кнопочки бы крайне не хотелось.
Надо чтоб открыл документ у тебя сразу свежие данные из mysql, перешел на другой лист там тоже все актуальное, изменил запрос, так же все обновилось.
 
В модуль ЭтаКнига.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan,в первую очередь туда вставил, но нет, не обновляет при переходах и при открытии документа, так же не обновляются результаты.
 
В модуль "ЭтаКнига"

Код
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call MySql(Sh, Sh.[a1].Value)
End Sub
Страницы: 1
Наверх