Большинство программ должно
работать с 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 и создайте ее вновь.
После этого старые записи все
равно будут представлены как
#DELETED#, а заново
добавленные/обновленные
записи будут уже выводиться
правильно.
Если после добавления
столбца 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, дающее точные
типы данных для каждого
столбца.
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=16384 в строке
подключения 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.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
