Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Excel-VBA и MySQL 5.0. проблема с Refresh (Евгений) 23/06/2006 - 16:28:50
      Re: Excel-VBA и MySQL 5.0. проблема с Refresh (Евгений) 27/06/2006 - 01:31:32

> Original message text:
> From: Евгений - 23/06/2006 - 16:28:50
> Subject:Excel-VBA и MySQL 5.0. проблема с Refresh
> -----------------
> ДД!
>
> пишу в VBA екселевсом, данные лежат в мускуле. ексель выбран за основу так как удобен при создании печатных форм и т.д.
>
> в мускуле новичок. основы более менее себе представляю. все вроде законектилось и работает, но есть одна непонятная проблема.
>
> при выполнении запросов мускульных первый запрос обрабатывается нормально, но на следующем возникает вот такой VBA еггог: "Данная операция не допускается во время фонового обнавления данных". вставляние пауз между запросами и т.д. - не помогает, база пишет что она рефрешится. попытка рефрешить базу синхронно не прошла - ексель ошибку выдает. причем есть прикол - при трассировке кода все работает нормально без фсяких фокусов. понимаю, что дело не в мускуле, а в VBA, но как с этим бороться?...
>
> используется для коннекта ODBC connector 3.5, сами таблицы InnoDB и MyISAM, VBA office XP
>


From: Евгений - 27/06/2006 - 01:31:32
Subject:Excel-VBA и MySQL 5.0. проблема с Refresh
-----------------
Вопрос снят
На всякий случай напишу, потому, что тем кто с нуля начинает, может пригодится.

- имеем уснановленый MySQL 5.0 или старше и базу данных в нем
- имеем Microsoft Excel 2000 или новее
- в редакторе excel VBA(alt-F11) в СВОЕЙ НУЖНОЙ РАБОЧЕЙ книге в меню Tools->References добавляем Microsoft ActiveX Data Objects x.y Library. x.y - версия, 2.5 работает
- скачиваем вот отсюда http://dev.mysql.com/downloads/ вот это Connector/ODBC и инсталируем
- на любом листке в любой книге меню Данные->Иморт внешних данных->Создать Запрос. выбрать <новый источник данных>, задать имя_КОННЕКТОРА, и во 2ом дропдауне выбрать MySQL ODBC x.yy Driver и нажать кнопку СВЯЗЬ. ВНИМАНИЕ! Это может не сработать, вылетит ошибка - не могу найти драйвер и т.д. Забить. следующий код сам сделает все что нужно:

Dim qt As QueryTable
Application.QueryTables.Add ("ODBC;DSN=имя_КОННЕКТОРА;UID=логин;PWD=пароль;Database=моя_база_данных", Range(адрес_ячейки))
qt.CommandText="...." 'здесь SQL запрос
qt.Refresh 'данные выборки заполнят листок начиная с адреса адрес_ячейки

собственно так и планировалось реализовать получение инфы из MySQL, но при попытке задать следующий запрос через qt.CommandText, вылетела ошибка, что невозможно выполнить команду пока идет фоновое обновление. Причем при трассировке все работает нормально - несколько запросов подрят выполняются. В режиме run-time - фиг. Победить не удалось.

Решилось через ActiveX
далее код через ADODB
'---------------------------
Dim db As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cs As ADODB.Command
Dim ra As Variant

Set db = New ADODB.Connection
db.Open "ODBC;DATABASE=база_данных;DSN=имя_КОННЕКТОРА;OPTION=0;PWD=пароль;PORT=порт;SERVER=адрес_сервера;UID=логин;"
'db.ConnectionString вернет потом вот что: Provider=MSDASQL.1;Extended Properties="DATABASE=моя_база_данных;DSN=имя_КОННЕКТОРА;OPTION=0;PWD=пароль;PORT=порт;SERVER=адрес_сервера;UID=логин"

Set rs = New ADODB.Recordset
rs.ActiveConnection = db

Set cs = New ADODB.Command
cs.ActiveConnection = db

cs.CommandText = "...." 'здесь SQL запрос
set rs = cs.Execute

rs.MoveFirst
set ra = rs.GetRows (, 0)
'--------------------------

в результате имеем двумерный массив ra с выборкой. ИМХО очень удобно. Лучше чем QueryTable адназначна.
DIXI

PS Может быть это все всем известно, но я изрядно помучился пытаясь осознать все эти мелкомяхкие навороты с ODBC, .NET, ADO, DAO, RDO и как все это употребить. Ибо хелпы вообще никакие, а поиск выдает кучу мусора.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
28977



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |