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 и создайте ее вновь.
#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!
-
При использовании Access 2000 необходимо установить самую последнюю
версию (2.6 или выше) Microsoft MDAC (
- 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=16834
в строке подключения ODBC или установить опциюChange BIGINT columns to IN
T в окне подключения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
.
8.3.4 Как сообщать о проблемах с MyODBC | Оглавление | 8.3.6 Как получить значение столбца AUTO_INCREMENT в ODBC |