5 MyODBC 3.51.03: тонкости и советы

5.1 Проблемы с подключением

5.1.1 Что такое имя источника данных?

Источник данных идентифицирует путь для данных, который может включать сетевую библиотеку, сервер, базу данных и другие атрибуты, в данном случае источник данных задает путь к базе данных MySQL. Чтобы соединиться с источником данных, Driver Manager проверяет системный реестр Windows для сбора специфической информации для подключения.

ODBC Driver Manager и MyODBC Drivers используют вход системного реестра, созданный ODBC Data Source Administrator. Этот вход содержит информацию относительно каждого источника данных и связанного с ним драйвера. Прежде, чем Вы сможете соединяться с источником данных, информация для конкретного подключения должна быть добавлена к системному реестру.

5.1.2 В чем разница между источниками данных машины и файлов?

Машинные источники данных сохраняют информацию подключения в системном реестре Windows на специфическом компьютере с определяемым пользователем именем. Вы можете использовать машинные источники данных только на компьютере, на котором они определены. Имеются два типа машинных источников данных: пользовательские и системные.

Пользовательские источники данных могут использоваться только текущим пользователем и видны только этому пользователю. Системные источники данных могут использоваться всеми пользователями на компьютере и видны всем пользователям компьютерных и системных сервисов, типа Microsoft Windows NT services.

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

Файловые источники данных (также известны как DSN-файлы) сохраняют информацию подключения в текстовом файле, и вообще более гибки в использовании, чем машинные источники данных. Например, Вы можете копировать файловый источник данных на любой компьютер с правильным ODBC-драйвером так, чтобы Ваша прикладная программа могла полагаться на непротиворечивую и точную информацию подключения на всех компьютеры, которые это используют. Или Вы можете помещать источник данных на сервер, совместно использовать его многими компьютерами в сети и легко поддерживать информацию подключения в одном месте.

Файловый источник данных может также быть неразделяемым. Такой источник данных дислоцируется на одном компьютере и указывает на машинный источник данных. Вы можете использовать неразделяемые источники данных, чтобы обратиться к существующим источникам данных машины из файловых источников данных.

5.1.3 Как установить удаленное подключение с системы A на систему B?

Если Вы хотите соединяться с системы A с системой B с именем пользователя myuser и паролем mypassword, надо:

На системе "B":

На системе "A":

Вы можете также использовать довольно простой HOWTO с http://www.phphelp.com/tutorial/using-myodbc-to-connect-to-a-remote-database.html.

5.1.4 Всякий раз, когда я пробую конфигурировать MyODBC DSN через ODBC Administrator, я получаю ошибку "Could Not Load Translator or Setup Library". В чем дело?

Подробности на MS KB Article(Q260558) по адресу http://support.microsoft.com/default.aspx?scid=kb;EN-US;q260558. Также убедитесь, что имеете самый современный файл ctl3d32.dll в системном каталоге.

5.1.5 Относительно ODBC Connection Pooling

Информацию по объединению подключений смотрите на http://support.microsoft.com/default.aspx?scid=kb;EN-US;q169470".

5.2 Проблемы с MS Access

5.2.1 Как настроить MS Access для работы с MySQL через MyODBC (3.51)?

  1. Если Вы используете MS Access 2000, может быть необходимо установить самый новый (версия 2.6 или выше) Microsoft MDAC (Microsoft Data Access Components) с http://www.microsoft.com/data.
  2. Вы должны также получить и применить Microsoft Jet 4.0 Service Pack 5 (SP5) с http://support.microsoft.com/support/kb/articles/Q239/1/14.ASP. Это устранит некоторые случаи, в которых столбцы отмечены как #deleted# в Access. Обратите внимание, что если Вы используете MySQL Version 3.22, Вы должны применить заплату MDAC и использовать MyODBC 2.50.32, 2.50.34 или выше.
  3. Установите последнюю версию MySQL с http://www.mysql.com/downloads/index.html.
  4. Установите последнюю версию MyODBC 3.51 или MyODBC с http://www.mysql.com/downloads/api-myodbc.html.
  5. Для всех версий Access Вы должны включить опцию Return matching rows в MyODBC (3.51)
  6. Теперь запустите работу с Access как внешний интерфейс для сервера MySQL через MyODBC или MyODBC 3.51.

5.2.2 Как экспортировать таблицу или сделать запрос из Access к MySQL?

Вы не можете экспортировать таблицу или сделать запрос к базе данных MySQL, если Вы не установили драйвер MyODBC или MyODBC 3.51.

Чтобы экспортировать таблицу из Access в MySQL:

  1. В окне Database (это то самое окно, которое появляется в Access, когда Вы открываете базу данных или проект Access, оно отображает ярлыки для создания новых объектов базы данных и открытия существующих объектов):
  2. Щелкните по имени таблицы или запроса и затем из меню File выберите Export.
  3. В окне Export Object Type введите имя объекта, а в окне Save As Type нажмите на ODBC Databases().
  4. В диалоге Export введите имя для файла (или используйте предложенное имя), затем нажмите на OK.
  5. Появится окно Select Data Source: оно вносит в список определенные источники данных для любых ODBC-драйверов, установленных на Вашем компьютере. Нажмите File Data Source или Machine Data Source, затем дважды щелкните по источнику данных MyODBC или MyODBC 3.51, в который Вы хотите экспортировать информацию.

Microsoft Access свяжется с сервером MySQL через этот источник данных и экспортирует новые таблицы и/или данные.

5.2.3 Как импортировать или привязать базу данных MySQL к таблице в Access?

  1. Откройте базу данных или переключитесь на окно Database для открытой базы данных.
  2. Чтобы импортировать таблицы, в меню File укажите Get External Data и выберите Import. Чтобы связывать таблицы, в меню File укажите на Get External Data и выберите Link Tables.
  3. В диалоговом Import (или Link) в блоке Files Of Type выберите ODBC Databases(). Диалоговое окно Select Data Source вносит в список определенные источники данных для любых ODBC-драйверов, установленных на Вашем компьютере. Нажмите File Data Source или Machine Data Source и дважды щелкните по источнику данных MyODBC или MyODBC 3.51.
  4. Если источник данных ODBC, который Вы выбрали, требует чтобы Вы входили в систему, введите Ваши логин и пароль (дополнительная информация может также требоваться), и затем нажмите OK.
  5. Microsoft Access свяжется с сервером MySQL через ODBC data source и отобразит список таблиц, которые Вы можете импортировать (import) или привязать (link).
  6. Нажмите на каждую таблицу, которую Вы хотите импортировать или связать, а затем выберите OK. Если Вы связываете таблицу, а она не имеет индекса, который уникально идентифицирует каждую запись, то Microsoft Access отображает список полей в связанной таблице. Нажмите на поле или на комбинацию полей, которые уникально идентифицируют каждую запись, а затем на OK.

5.2.4 Структура или расположение связанной таблицы были изменены. Я могу увидеть эти изменения в связанных таблицах?

Конечно. Используйте следующую процедуру, чтобы рассмотреть или обновить связи, когда структура или расположение связанной таблицы изменились. Linked Table Manager вносит в список пути ко всем в настоящее время связанным таблицам.

Чтобы посмотреть или обновить запись:

  1. Откройте базу данных, которая содержит связи с таблицами.
  2. В меню Tools укажите Add-ins и выберите Linked Table Manager.
  3. Выберите переключатель для таблиц, чьи связи Вы хотите обновить.
  4. Нажмите OK, чтобы обновить связи.

Microsoft Access подтвердит успешную регенерацию или, если таблица не была найдена, отобразит диалоговое окно Select New Location of <имя таблицы>, в котором Вы можете определять новое расположение таблицы. Если несколько выбранных таблиц передвигались в новое расположение, которое Вы определяете, Linked Table Manager ищет все выбранные таблицы и модифицирует все связи.

Чтобы сменить путь для набора связанных таблиц:

  1. Откройте базу данных, которая содержит связи с таблицами.
  2. В меню Tools укажите Add-ins и выберите Linked Table Manager.
  3. Выберите Always Prompt For A New Location.
  4. Выберите переключатель для таблиц, чьи связи Вы хотите изменить, а затем нажмите OK.
  5. В диалоговом окне Select New Location of <имя таблицы > определите новое расположение, нажмите Open, а затем OK.

5.2.5 Когда я вставляю или модифицирую запись в связанных таблицах, она помечается как #Deleted#. Что делать?

Если вставленные или модифицируемые записи показываются как #DELETED# в Access:

5.2.6 Когда я пробую удалять или модифицировать запись, я получаю ошибку "Row cannot be located for updating. Some values may have been changed since it was last read"

Проверьте параметр Return Matching Rows диалога настройки DSN или укажите параметр подключения OPTION=2.

5.2.7 Всякий раз, когда я экспортирую таблицу из Access 97, я получаю ошибку "syntax error".

Это странная проблема Access 97, ее уже нет в Access 2000 или в 2002. Вы можете решить проблему, обновив драйвер MyODBC до MyODBC 3.51.02 или выше.

5.2.8 Access возвращает ошибку "Another user has modified the record that you have modified" при редактировании записей

В большинстве случаев это может быть решено, делая одно из следующего:

Если вышеупомянутое не помогает, Вы должны сделать файл трассировки MyODBC и попробовать вычислить, что пошло не так.

5.2.9 Как отслеживать сообщения ODBC об ошибках входа в систему в Access?

Обратитесь к интерактивному справочнику на http://support.microsoft.com/support/kb/articles/Q124/9/01.asp?LN=EN-US&SD=gn&FR=0%3CP%3E.

5.2.10 Как оптимизировать эффективность пары Access и (My)ODBC ?

5.2.11 Есть ли другие инструментальные средства для работы из Access с MySQL, кроме MyODBC?

Конечно, есть. Список доступных инструментальных средств есть на странице конверторов: http://www.mysql.com/downloads/contrib.html#SEC643.

5.2.12 Я имею очень длинные таблицы. Какова самая лучшая конфигурация для MyODBC, чтобы обратиться к этим таблицам?

Выключите следующие три параметра (или задайте в строке подключения OPTION=2059):

5.3 MyODBC с VB, ADO, DAO, RDO и ASP

5.3.1 При выполнении запроса "SELECT count (*) FROM table ..." в MyODBC (3.51) возвращается ошибка.

Это потому, что выражение COUNT(*) возвращает BIGINT и ADO не может работать с такими величинами. Установите опцию, чтобы обработать BIGINT как INT в MyODBC (option=16384).

5.3.2 Когда я использую методы ADO AppendChunk() или GetChunk(), я получаю ошибку Multiple-step operation generated errors. Check each status value

Методы ADO GetChunk() и AppendChunk() не работают так, как от них ожидается, когда расположение курсора определено как adUseServer. Но все работает с применением adUseClient.

Простой пример можно найти на http://www.dwam.net/iishelp/ado/docs/adomth02_4.htm.

5.3.3 Как найти общее количество строк, на которые воздействует специфическая инструкция SQL в ADO?

Вы можете использовать свойство ADO RecordsAffected. Для получения большего количества информации относительно использования метода execute, обратитесь к ресурсу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp .

5.3.4 Примеры VB с ADO, DAO и RDO

Простые примеры использования ADO, DAO и RDO с VB есть по адресам:

Если у Вас есть хорошие примеры применения ADO/DAO/RDO или соображения по этим вопросам, напишите на myodbc@lists.mysql.com.

5.3.5 ASP и MySQL с MyODBC

Подробная информация по доступу к MySQL через ASP с использованием MyODBC есть по следующим адресам:

5.4 Утилиты для ODBC

5.4.1 Когда я пробую экспортировать таблицы из MS DTS в MySQL, используя MyODBC, я получаю ошибку синтаксиса

Это проблема Access 97 и происходит она когда Ваша таблица состоит из полей с типами TEXT или VARCHAR. Вы можете обойти эту ошибку, обновив MyODBC до версии 3.51.02 или выше.

5.4.2 Настройка связки MySQL+MyODBC+unixODBC+ColdFusion на Solaris

Есть статья по настройке на http://dbforums.com/showthread.php?threadid=174934.

5.5 Базисная функциональность

5.5.1 MyODBC 3.51 поддерживает динамический тип курсора?

Да. MyODBC 3.51 поддерживает динамический, "только вперед" и статический типы курсора.

Из-за проблем эффективности, драйвер не поддерживает это свойство по умолчанию. Можно его включить, определяя параметр опции подключения как OPTION=32 или проверяя опцию Enable Dynamic Cursor из настройки DSN.

5.5.2 Можно ли использовать программы MyODBC 2.50 с MyODBC 3.51?

Можно. Если Вы находите, что что-то не работает с MyODBC 3.51, но работает с MyODBC 2.50, напишите об этом на myodbc@lists.mysql.com.

5.5.3 MyODBC работает с провайдерами .NET?

Работает. Это было проверено с провайдерами Microsoft .NET, список которых можно найти на: http://www.mysql.com/products/myodbc/manual.html#MyODBC_With_.NET.

Предостережение: при использовании ODBC.NET с MyODBC, при выборке пустой строки (нулевой длины) это начинает давать исключительную ситуацию SQL_NO_DATA. Вы можете получить заплатку для этого с http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243.

5.5.4 Проверенные прикладные программы, работающие с MyODBC

MyODBC был проверен со следующими прикладными программами:

Если Вы знаете о любых других прикладных программах, которые работают с MyODBC, пожалуйста, напишите об этом на myodbc@lists.mysql.com.

5.6 Coldfusion и MyODBC

Файл mydsn.dll должен использоваться, чтобы формировать и удалять DSN-файл системного реестра для драйвера MyODBC в прикладных программах Coldfusion. Чтобы сформировать DLL, Вам понадобятся VC++ 6.0 и окружение для компилятора C++, указывающее место дислокации файла CFAPI header, cfx.h. Также добавьте путь include для Вашей среды: \cfusion\cfx\include

Чтобы использовать mydsn.dll, Вы должны использовать администратор CFX Coldfusion, чтобы зарегистрировать заказной тэг CFX_MYDSN. Вы имеете две функции: ADD добавляет DSN, а REMOVE удаляет. Чтобы добавить запись, Вы используете следующий синтаксис: <CFX_MYDSN ACTION="ADD" DSN="DSN=DSNname" SERVER="SERVER=ServerNameOrIPAddress" DATABASE="DATABASE=DBname" USERNAME="UID=UserName" PASSWORD="PWD=UserPassword" PORT="PORT=3307" OPTION="OPTION=12">

Обратите внимание, что OPTION здесь задает два параметра: Trace MyODBC (4) и Allow Big Results (8), так что в сумме 4+8 = 12.

Чтобы удалить DSN-запись, Вы должны использовать: <CFX_MYDSN ACTION="REMOVE" DSN="DSN=DSNname">

Чтобы работать правильно, Ваша среда нуждается в пакете MDAC 2.0 или выше.