8.3.4 Как сообщать о проблемах с MyODBC | Оглавление | 8.3.6 Как получить значение столбца AUTO_INCREMENT в ODBC |
Большинство программ должно работать с MyODBC
, но для каждой из
перечисленных ниже мы либо провели тестирование сами, либо получили
подтверждение от пользователей, что она действительно работает:
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 и выше, чтобы обойти эту
проблему.
Return matching rows
. Для Access 2.0 следует дополнительно включить
Simulate ODBC 1.0.
TIMESTAMP
для временных меток. Для максимальной
переносимости рекомендуется TIMESTAMP(14)
или просто TIMESTAMP
вместо
других вариантов TIMESTAMP(X)
.
#DELETED#
.
DOUBLE
). Access отказывается работать при сравнении чисел с
плавающей запятой одинарной точности. Проявляется это обычно в том,
что новые или обновленные строки могут выводиться как #DELETED#
или в
том, что вы не можете найти или обновить строки.
BIGINT
, результат будет выводиться как #DELETED#
. Обходное решение
заключается в следующем:
TIMESTAMP
в качестве типа
данных, предпочтительно TIMESTAMP(14)
.
Change BIGINT columns to INT
в диалоговом окне
опций подключения в Администраторе источников данных ODBC DSN
#DELETED#
, а
заново добавленные/обновленные записи будут уже выводиться правильно.
TIMESTAMP
все еще появляется ошибка
Another user has changed your data
, то, возможно, поможет
следующий трюк. Не используйте режим работы ``Таблица''. Вместо этого
создайте форму с желаемыми полями и используйте режим работы
``Форма''. Следует установить свойство DefaultValue
для столбца
TIMESTAMP
в NOW()
. Возможно, было бы неплохо убрать столбец TIMESTAMP
из поля зрения, чтобы не смущать пользователей.
Query|SQLSpecific|Pass-Through
.
BLOB
как об объектах OLE. Если
вместо этого вы хотите иметь столбцы MEMO
, то необходимо изменить тип
столбца на TEXT
с помощью ALTER TABLE
.
DATE
. Если с
ними возникают проблемы, следует изменить тип этих столбцов на
DATETIME
.
BYTE
, то Access будет
пытаться экспортировать его как TINYINT
вместо TINYINT UNSIGNED
. Это
будет вызывать проблемы, если величины в данном столбце превышают 127!
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(*)
, чтобы получить правильное
количество строк.
Return matching rows
.
Don't
optimize column widths
и Return matching rows
.
Active
или метод Open
.
Следует учитывать, что Active
будет начинать работу при автоматической
выдаче запроса SELECT * FROM ...
, что может оказаться не так уж и хорошо
для больших таблиц!
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.
VARCHAR
вместо ENUM
,
поскольку экспорт ENUM
происходит таким образом, что вызывает неприятности
в MySQL.
CONCAT()
. Например:
select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;Величины, извлеченные как строки этим способом, должны корректно распознаваться программой Excel97 как значения времени. Назначение функции
CONCAT()
в этом примере состоит в том, чтобы ``обмануть'' ODBC, заставив
интерпретировать столбец как столбец ``строкового типа''. Без функции
CONCAT()
ODBC будет считать, что это столбец временного типа, и Excel не
распознает его. Следует заметить, что это является ошибкой Excel,
поскольку он автоматически преобразует строку в значения времени. Это
замечательно если источником является текстовый файл, но это глупо, когда источником является подключение ODBC, дающее точные
типы данных для каждого столбца.
MyODBC
и помощь встроенной программы Microsoft Query. Для
создания, например, базы данных db
с таблицей, содержащей 2 столбца с
текстом, необходимо выполнить следующие действия:
mysql
.
db
.
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);
PRIMARY
, тем не менее, это не было проблемой.
Return matching rows
.
SHOW PROCESSLIST
не будут работать правильно. Для устранения данной проблемы нужно добавить
опцию OPTION=16834
в строке подключения ODBC или установить опцию Change
BIGINT columns to IN
T в окне подключения MyODBC
. Можно также установить
опцию Return matching rows
.
[Microsoft][ODBC Driver Manager] Driver does not
support this parameter
, то ее причина может заключаться в том, что
результат содержит данные типа BIGINT
. Попробуйте установить опцию Change
BIGINT columns to INT
в окне подключения MyODBC
.
Don't optimize column widths
.
8.3.4 Как сообщать о проблемах с MyODBC | Оглавление | 8.3.6 Как получить значение столбца AUTO_INCREMENT в ODBC |