Большинство программ должно работать с MyODBC, но для каждой из
перечисленных ниже мы либо провели тестирование сами, либо получили
подтверждение от пользователей, что она действительно работает:
-
Программа
-
Access
Чтобы заставить Access работать:
-
При использовании Access 2000 необходимо установить самую последнюю версию (2.6 или выше) Microsoft MDAC (
Microsoft Data Access Components), которую можно найти на https://www.microsoft.com/data/. Это позволит устранить ошибку в Access, которая проявляется в том, что при экспорте данных в MySQL не указываются имена таблиц и столбцов. Еще один способ обойти эту ошибку заключается в модернизацииMyODBCдо версии 2.50.33 и MySQL до версии 3.23.x - оба апгрейда вместе обеспечивают обход данной ошибки!Необходимо также получить и использовать Microsoft Jet 4.0 Service Pack 5 (SP5), который можно найти на https://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можно загрузить с https://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<[email protected]>)):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.