Большинство программ должно работать с 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
.