8.3.5 Программы, работающие с MyODBC
8.3.5 Программы, работающие с MyODBC
Большинство программ должно работать с MyODBC, но для каждой из перечисленных ниже мы либо провели тестирование сами, либо получили подтверждение от пользователей, что она действительно работает:
Программа
Программа-
Комментарий
Комментарий - Access
-
Чтобы заставить Access работать:
- При использовании Access 2000 необходимо установить самую последнюю версию (2.6 или выше) Microsoft MDAC (Microsoft Data Access Components), которую можно найти на http://www.microsoft.com/data/. Это позволит устранить ошибку в Access, которая проявляется в том, что при экспорте данных в MySQL не указываются имена таблиц и столбцов. Еще один способ обойти эту ошибку заключается в модернизации MyODBC до версии 2.50.33 и MySQL до версии 3.23.x - оба апгрейда вместе обеспечивают обход данной ошибки! Необходимо также получить и использовать Microsoft Jet 4.0 Service Pack 5 (SP5), который можно найти на http://support.microsoft.com/support/kb/articles/Q 239/1/14.ASP. Это позволит исключить некоторые случаи, когда столбцы в Access отмечаются как #deleted#. Следует учитывать, что при использовании версии MySQL 3.22 необходимо применять патч для MDAC и использовать MyODBC 2.50.32 или 2.50.34 и выше, чтобы обойти эту проблему.
- Для всех версий Access необходимо включить для MyODBC флаг опции Return matching rows. Для Access 2.0 следует дополнительно включить Simulate ODBC 1.0.
- Все таблицы, в которых вы хотите иметь возможность обновления, должны содержать столбец типа TIMESTAMP для временных меток. Для максимальной переносимости рекомендуется TIMESTAMP(14) или просто TIMESTAMP вместо других вариантов TIMESTAMP(X).
- Таблица должна иметь первичный ключ. Если не имеет, то новые или обновленные строки могут выводиться как #DELETED#.
- Используйте поля с числами с плавающей запятой только двойной точности (типа DOUBLE). Access отказывается работать при сравнении чисел с плавающей запятой одинарной точности. Проявляется это обычно в том, что новые или обновленные строки могут выводиться как #DELETED# или в том, что вы не можете найти или обновить строки.
-
При связывании через MyODBC таблицы, один из столбцов которой имеет
тип BIGINT, результат будет выводиться как #DELETED#. Обходное решение
заключается в следующем:
- Добавьте еще один пустой столбец с TIMESTAMP в качестве типа данных, предпочтительно TIMESTAMP(14).
- Проверьте Change BIGINT columns to INT в диалоговом окне опций подключения в Администраторе источников данных ODBC DSN
- Удалите данную табличную связь из Access и создайте ее вновь.
- Если после добавления столбца TIMESTAMP все еще появляется ошибка Another user has changed your data, то, возможно, поможет следующий трюк. Не используйте режим работы ``Таблица''. Вместо этого создайте форму с желаемыми полями и используйте режим работы ``Форма''. Следует установить свойство DefaultValue для столбца TIMESTAMP в NOW(). Возможно, было бы неплохо убрать столбец TIMESTAMP из поля зрения, чтобы не смущать пользователей.
- В некоторых случаях Access может создавать недопустимые запросы SQL, которые MySQL не может понять. Это можно устранить путем выбора в меню Access опции Query|SQLSpecific|Pass-Through.
- Access под NT будет сообщать о столбцах BLOB как об объектах OLE. Если вместо этого вы хотите иметь столбцы MEMO, то необходимо изменить тип столбца на TEXT с помощью ALTER TABLE.
- Access не всегда может правильно обработать столбцы типа DATE. Если с ними возникают проблемы, следует изменить тип этих столбцов на DATETIME.
- Если Access содержит столбец, определенный как BYTE, то Access будет пытаться экспортировать его как TINYINT вместо TINYINT UNSIGNED. Это будет вызывать проблемы, если величины в данном столбце превышают 127!
- ADO
-
При написании программ с привлечением интерфейса ADO API и MyODBC
необходимо обратить внимание на некоторые исходные свойства, которые не
поддерживаются сервером MySQL. Например, использование свойства
CursorLocation как adUseServer будет возвращать для свойства RecordCount
результат -1. Чтобы получить правильную величину, необходимо установить
данное свойство в adUseClient, как показано в коде VB ниже:
Dim myconn As New ADODB.Connection Dim myrs As New Recordset Dim mySQL As String Dim myrows As Long myconn.Open "DSN=MyODBCsample" mySQL = "SELECT * from user" myrs.Source = mySQL Set myrs.ActiveConnection = myconn myrs.CursorLocation = adUseClient myrs.Open myrows = myrs.RecordCount myrs.Close myconn.Close
Еще один обходной путь состоит в том, чтобы для такого запроса использовать команду SELECT COUNT(*), чтобы получить правильное количество строк. - Активные серверные страницы (ASP)
- Необходимо использовать флаг опции Return matching rows.
- BDE-приложения
- Чтобы заставить их работать, следует установить флаги опций Don't optimize column widths и Return matching rows.
- Borland Builder 4
- При запуске запроса можно использовать свойство Active или метод Open. Следует учитывать, что Active будет начинать работу при автоматической выдаче запроса SELECT * FROM ..., что может оказаться не так уж и хорошо для больших таблиц!
- ColdFusion (Под Unix)
- Приведенные далее сведения взяты из документации по ColdFusion. Для применения драйвера unixODBC с источником данных MyODBC следует использовать следующую информацию. Корпорация Allaire подтвердила, что версия MyODBC 2.50.26 работает с версией MySQL 3.22.27 и ColdFusion для Linux (любая более новая версия также должна работать). Драйвер MyODBC можно загрузить с http://www.mysql.com/downloads/api-myodbc.html В версии ColdFusion 4.5.1 можно использовать Администратор источников данных ColdFusion для добавления источника данных MySQL. Однако данный драйвер не включен в версию ColdFusion 4.5.1. Чтобы драйвер MySQL появился в выпадающем списке источников данных ODBC, необходимо создать драйвер MyODBC и скопировать его в каталог `/opt/coldfusion/lib/libmyodbc.so'. Каталог `Contrib' содержит программу `mydsn-xxx.zip', которая позволяет создавать и удалять файл реестра DSN для драйвера MyODBC для приложений Coldfusion.
- DataJunction
- Необходимо изменить эту программу для вывода VARCHAR вместо ENUM, поскольку экспорт ENUM происходит таким образом, что вызывает неприятности в MySQL.
- Excel
-
Работает. Несколько замечаний:
-
Если существуют проблемы с датами, попробуйте выбирать их как строки,
используя функцию CONCAT(). Например:
select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;
Величины, извлеченные как строки этим способом, должны корректно распознаваться программой Excel97 как значения времени. Назначение функции CONCAT() в этом примере состоит в том, чтобы ``обмануть'' ODBC, заставив интерпретировать столбец как столбец ``строкового типа''. Без функции CONCAT() ODBC будет считать, что это столбец временного типа, и Excel не распознает его. Следует заметить, что это является ошибкой Excel, поскольку он автоматически преобразует строку в значения времени. Это замечательно если источником является текстовый файл, но это глупо, когда источником является подключение ODBC, дающее точные типы данных для каждого столбца.
-
Если существуют проблемы с датами, попробуйте выбирать их как строки,
используя функцию CONCAT(). Например:
- Word
-
Для извлечения данных из MySQL в документы Word/Excel следует использовать
драйвер MyODBC и помощь встроенной программы Microsoft Query. Для
создания, например, базы данных db с таблицей, содержащей 2 столбца с
текстом, необходимо выполнить следующие действия:
- Вставьте строки, используя командную строку клиента mysql.
- Создайте файл DSN, используя менеджер ODBC, например, my для созданной выше базы данных db.
- Откройте приложение Word.
- Создайте новый пустой документ.
- Используя панель инструментов вызванной базы данных, нажмите кнопку Insert database.
- Нажмите кнопку Get Data.
- В окне Get Data справа нажмите кнопку Ms Query.
- В окне Ms Query создайте новый источник данных, используя файл DSN my.
- Выберите новый запрос.
- Выберите желаемый столбец.
- Создайте фильтр (при желании).
- Создайте сортировку (при желании).
- Выберите Return Data to Microsoft Word.
- Нажмите кнопку Finish.
- Нажмите Insert data и выбирайте записи.
- Нажмите Ok. Вы увидите выбранные строки в своем документе в Word.
- odbcadmin
- Тестовая программа для ODBC.
- Delphi
-
Необходимо использовать версию BDE 3.2 или более новую. Установите поле
опции Don't optimize column width при подключении к MySQL. Кроме того,
ниже приводится потенциально полезный код Delphi, который устанавливает
вхождения для драйвера MyODBC как в ODBC, так и в BDE. (Запись в BDE
требует наличия редактора псевдонимов BDE Alias Editor, который доступен
бесплатно на Delphi Super Page. Спасибо за это Брайену Брантону (Bryan
Brunton bryan@flesherfab.com)):
fReg:= TRegistry.Create; fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True); fReg.WriteString('Database', 'Documents'); fReg.WriteString('Description', ' '); fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll'); fReg.WriteString('Flag', '1'); fReg.WriteString('Password', ''); fReg.WriteString('Port', ' '); fReg.WriteString('Server', 'xmark'); fReg.WriteString('User', 'winuser'); fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True); fReg.WriteString('DocumentsFab', 'MySQL'); fReg.CloseKey; fReg.Free; Memo1.Lines.Add('DATABASE NAME='); Memo1.Lines.Add('USER NAME='); Memo1.Lines.Add('ODBC DSN=DocumentsFab'); Memo1.Lines.Add('OPEN MODE=READ/WRITE'); Memo1.Lines.Add('BATCH COUNT=200'); Memo1.Lines.Add('LANGDRIVER='); Memo1.Lines.Add('MAX ROWS=-1'); Memo1.Lines.Add('SCHEMA CACHE DIR='); Memo1.Lines.Add('SCHEMA CACHE SIZE=8'); Memo1.Lines.Add('SCHEMA CACHE TIME=-1'); Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT'); Memo1.Lines.Add('SQLQRYMODE='); Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE'); Memo1.Lines.Add('ENABLE BCD=FALSE'); Memo1.Lines.Add('ROWSET SIZE=20'); Memo1.Lines.Add('BLOBS TO CACHE=64'); Memo1.Lines.Add('BLOB SIZE=32'); AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
- C++ Builder
- Проведено тестирование с версией BDE 3.0. Единственная обнаруженная проблема состоит в том, что при изменениях схемы таблиц не обновляются поля запросов. Хотя BDE не распознает первичных ключей, а только индекс PRIMARY, тем не менее, это не было проблемой.
- Vision
- Необходимо использовать флаг опции Return matching rows.
- Visual Basic
- Чтобы обеспечить возможность обновить таблицу, для нее необходимо определить первичный ключ. Visual Basic с ADO не обрабатывает больших целых чисел. Это означает, что некоторые запросы вроде SHOW PROCESSLIST не будут работать правильно. Для устранения данной проблемы нужно добавить опцию OPTION=16834 в строке подключения ODBC или установить опцию Change BIGINT columns to INT в окне подключения MyODBC. Можно также установить опцию Return matching rows.
- VisualInterDev
- Если возникает ошибка [Microsoft][ODBC Driver Manager] Driver does not support this parameter, то ее причина может заключаться в том, что результат содержит данные типа BIGINT. Попробуйте установить опцию Change BIGINT columns to INT в окне подключения MyODBC.
- Visual Objects
- Необходимо использовать флаг опции Don't optimize column widths.