Большинство программ должны работать с MyODBC, но для каждой из тех, что перечислены ниже, это было проверено.
Если Вы используете Access 2000, Вы должны получить и установить
самый новый (version 2.6 или выше) компонент Microsoft MDAC
(Microsoft Data Access Components
) с адреса http://www.microsoft.com/data.
Это устранит следующую ошибку в Access: когда Вы экспортируете данные
в MySQL, таблица и названия столбцов не определены. Другой способ
обхода этой ошибки в том, чтобы обновить MyODBC до Version 2.50.33 и
MySQL до Version 3.23.x, они вместе обеспечивают обход для этой
проблемы! Вы должны также получить и применить Microsoft Jet 4.0
Service Pack 5 (SP5), который можно найти на http://support.microsoft.com/support/kb/articles/Q%20239/1/14.ASP.
Это устранит некоторые случаи, где столбцы отмечены как
#deleted#
в пакете Access. Обратите внимание, что, если
Вы используете MySQL Version 3.22, Вы должны применить заплату MDAC и
использовать MyODBC 2.50.32 или 2.50.34.
#Deleted#
.
TIMESTAMP(14)
или простой TIMESTAMP
вместо
других вариантов на тему TIMESTAMP(X)
.
#Deleted#
, или Вы не можете находить
строки модификаций.
Another user has changed
your data
после добавления столбца TIMESTAMP
,
следующий прием может помочь Вам: Не используйте просмотр листа данных
table
. Создайте взамен форму с полями, которые Вы хотите
обрабатывать, и используйте эту форму для просмотра в формате
form
. Вы должны установить реквизит
DefaultValue
для столбца TIMESTAMP
в
значение NOW()
. Неплохо скрыть столбец
TIMESTAMP
, чтобы не запутывать Ваших пользователей.
BLOB
-столбцы как OLE
OBJECTS
. Если Вы хотите взамен иметь столбцы MEMO
,
Вы должны изменить столбец на TEXT
через ALTER
TABLE
.
DATE
. Если Вы имеете проблему с этим, измените столбцы на
DATETIME
.
"Query|SQLSpecific|Pass-Through"
из меню Access.
TINYINT
вместо
TINYINT UNSIGNED
. Это задаст Вам проблем, если Вы имеете
значения > 127!
Return matching rows
.
Return matching rows
и Simulate ODBC
1.0
.CursorLocation Property
как
adUseServer
возвратит для RecordCount Property
результат -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 ...
, который не может быть хорошим, если Ваши таблицы
большие!
VARCHAR
вместо
ENUM
, поскольку пакет экспортирует последнее способом,
который вызывает разрушение MySQL.
CONCAT()
. Например: select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;Значения, найденные как строки, этим способом должны быть правильно распознаны как значения времени Excel97. Цель
CONCAT()
в этом примере состоит в том, чтобы ввести в
заблуждение ODBC, чтобы тот принял столбец за строковый. Без
CONCAT()
ODBC знает, что столбец имеет тип времени, а
Excel этого не понимает. Обратите внимание, что это ошибка в Excel.
Она происходит потому, что он автоматически преобразовывает строку во
время. Это хорошо, если источником был текстовый файл, но просто
глупо, когда источником является ODBC-соединение, которое сообщает
точные типы для каждого столбца.MyODBC
и Add-in Microsoft Query help.
Например, создайте базу данных с таблицей, содержащей 2 столбца текста:
mysql
.
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);
Return matching rows
.
SHOW
PROCESSLIST
, не будут работать правильно. Устраняется это
указанием опции OPTION=16834
в строке соединения ODBC или
опции Change BIGINT columns to INT
на экране соединения
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
.