| |
MySQL предоставляет поддержку интерфейса ODBC с помощью пакета MyODBC. Эта глава научит Вас, как установить и использовать MyODBC. Здесь Вы также найдете список общих программ, которые, как известно, работают с MyODBC.
MyODBC представляет собой 32-bit ODBC (2.50) level 0 (с возможностями level 1 и level 2) драйвер для соединения ODBC-приложений с СУБД MySQL. MyODBC работает под Windows95, Windows98, NT и на некоторых Unix-системах.
MyODBC публично доступен, и Вы можете спокойно скачать его новейшую версию с http://www.mysql.com/downloads/api-myodbc.html.
Если Вы имеете проблему с MyODBC, и Ваша программа также работает с OLEDB, Вы должны попробовать драйвер для OLEDB, который Вы можете найти в разделе Contrib.
Обычно Вы должны установить MyODBC только на системах с Windows. Под Unix MyODBC Вам понадобится только, если Вы имеете программу подобную ColdFusion, которая выполняется на Unix-машине и использует ODBC, чтобы соединиться с базами данных.
Если Вы хотите устанавливать MyODBC под Unix, Вы будете также нуждаться в диспетчере ODBC. MyODBC, как известно, работает с большинством Unix ODBC-диспетчеров. Вы можете найти список ODBC-секции ссылок на страничке MySQL. Подробности в разделе "1.2.3 Хорошие ссылки по MySQL ".
Чтобы установить MyODBC в Windows, Вы должны загрузить
соответствующий файл MyODBC .zip (для Windows9x или
NT/Win2000), распаковывать его с помощью WINZIP
или другой
подобной программы и выполнить файл SETUP.EXE
.
В Windows NT Вы можете получать следующую ошибку при попытке установить MyODBC:
An error occurred while copying C:\WINDOWS\SYSTEM\MFC30.DLL. Restart Windows and try installing again (before running any applications which use ODBC)
Проблема в этом случае состоит в том, что некоторая другая программа
использует ODBC, а также из-за того, как неудобно устроена Windows, Вы не
можете в этом случае установить новые ODBC-драйверы программой установки
Microsoft ODBC setup. В большинстве случаев Вы можете продолжать установку,
нажав кнопку Ignore
, чтобы копировать остальную часть файлов
MyODBC. Если это не работает, решение состоит в том, чтобы перезагрузить Ваш
компьютер в safe mode (выберите это, нажимая F8 перед запуском Windows после
перезагрузки), установить MyODBC и перезагрузиться назад в
нормальный режим работы.
GRANT
. Подробности в разделе "10.1
Синтаксис GRANT
и REVOKE
".
Обратите внимание, что имеются другие опции конфигурации на экране MySQL (trace, don't prompt on connect, etc), которые Вы можете опробовать, если сталкиваетесь с проблемами.
Имеются три возможности для определения имени сервера в Windows95:
ip hostnameНапример:
194.216.84.21 my_hostname
Пример того, как заполнить поля в ODBC setup
:
Windows DSN name: test Description: This is my test database MySql Database: test Server: 194.216.84.21 User: monty Password: my_password Port:
Значение для поля Windows DSN name
: любое имя, которое
является уникальным в Вашей Windows ODBC-установке.
Вы не должны определить значения для полей Server
,
User
, Password
или Port
на экране
установки ODBC. Однако, если Вы это сделаете, значения будут использоваться
как значения по умолчанию позже, когда Вы попытаетесь сделать соединение.
Тогда их можно поменять.
Если номер порта явно не задан, используется заданный по умолчанию порт (3306).
Если Вы определяете опцию Read options from C:\my.cnf
, группы
client
и odbc
будут читаться из файла
C:\my.cnf.
Можно определять следующие параметры для MyODBC в разделе
[Servername]
файла ODBC.INI
или через аргумент
InConnectionString
в вызове SQLDriverConnect()
.
Параметр | Значение по умолчанию | Комментарий |
user | ODBC (в Windows) | username используемый, чтобы соединиться с MySQL. |
server | localhost | Имя хоста сервера MySQL. |
database | Заданная по умолчанию база данных | |
option | 0 | Целое число, которым Вы можете определять, как MyODBC должен работать. Подробности ниже. |
port | 3306 | Порт TCP/IP, чтобы использовать, если
server не localhost . |
stmt | Команда, которая будет выполнена при
установлении соединения с MySQL . | |
password | Пароль для комбинации параметров
server и user . | |
socket | Сокет или именованный канал Windows. |
Параметр option используется, чтобы сообщить MyODBC, что клиент не на 100% ODBC-совместим. В Windows обычно устанавливаются опции на экране соединения, но можно также устанавливать это в параметре option. Следующие опции перечислены в том же самом порядке, в каком они появляются на экране соединения MyODBC:
Bit | Назначение |
1 | Клиент не может обрабатывать возвращаемую MyODBC реальную ширину столбца. |
2 | Клиент не может обрабатывать возвращаемое MySQL истинное значение числа обрабатываемых строк. Если этот флажок установлен MySQL возвращает найденные строки. Нужно иметь MySQL 3.21.14 или более новый, чтобы получить такую поддержку. |
4 | Создает файл регистрации отладки c:\myodbc.log. Это
аналогично указанию MYSQL_DEBUG=d:t:O,c::\myodbc.log в
AUTOEXEC.BAT. |
8 | Не устанавливать ограничение пакета для результатов и параметров. |
16 | Не запрашивать ничего, даже если драйвер хотел бы что-то запросить. |
32 | Моделировать драйвер ODBC 1.0 в некотором контексте. |
64 | Игнорировать использование имени базы данных в 'database.table.column'. |
128 | Принудительно использовать курсоры менеджера ODBC. |
256 | Отключить использование расширенной выборки. |
512 | Приводить поля CHAR к полной длине столбца. |
1024 | SQLDescribeCol() возвратит полное имя столбца. |
2048 | Использовать сжатый протокол сервера/клиента. |
4096 | Сообщает, чтобы сервер игнорировал пробел после имени
функции и перед '(' (необходимо для работы с PowerBuilder). Эта
опция сделает все имена функций ключевыми словами! |
8192 | Соединяться с именованными конвейерами с сервером
mysqld под NT. |
16384 | Изменить столбцы LONGLONG на INT (некоторые приложения не могут обрабатывать LONGLONG). |
32768 | Вернуть 'user' как Table_qualifier и Table_owner из вызова SQLTables (экспериментально). |
65536 | Читать параметры из групп client и
odbc файла настроек my.cnf. |
131072 | Добавляет некоторые дополнительные проверки безопасности (обычно не надо, но...). |
Если Вы хотите иметь много опций, Вы должны сложить вышеупомянутые флажки. Например, установка option в 12 (4+8) дает Вам отладку без ограничений пакета.
По умолчанию MYODBC.DLL компилируется для оптимальной
эффективности. Если Вы хотите отладить MyODBC (например,
чтобы включить трассировку), Вы должны взамен использовать
MYODBCD.DLL
. Чтобы установить этот файл, скопируйте
MYODBCD.DLL взамен установленной библиотеки MYODBC.DLL
.
MyODBC был проверен с Access, Admndemo.exe, C++-Builder, Borland Builder 4, Centura Team Developer (прежде это был пакет Gupta SQL/Windows), ColdFusion (на Solaris и NT с svc pack 5), Crystal Reports, DataJunction, Delphi, ERwin, Excel, iHTML, FileMaker Pro, FoxPro, Notes 4.5/4.6, SBSS, Perl DBD-ODBC, Paradox, Powerbuilder, Powerdesigner 32 bit, VC++ и Visual Basic.
Если Вы знаете о любых других приложениях, которые работают с MyODBC, пожалуйста, напишите об этом на [email protected]!
С некоторыми программами Вы можете получать ошибку подобно:
Another user has modifies the record that you have modified
.
В большинстве случаев это может быть решено следующим образом:
Большинство программ должны работать с MyODBC, но для каждой из тех, что перечислены ниже, это было проверено.
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 239/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
.AUTO_INCREMENT
в ODBCОбщая проблема: как получить значение автоматически сгенерированный ID из
INSERT
. С ODBC Вы можете делать что-нибудь вроде этого
(считается, что auto
является полем с
AUTO_INCREMENT
):
INSERT INTO foo (auto,text) VALUES(NULL,'text'); SELECT LAST_INSERT_ID();
Или, если Вы только собираетесь вставлять ID в другую таблицу, Вы можете сделать так:
INSERT INTO foo (auto,text) VALUES(NULL,'text'); INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
Для пользы некоторых ODBC-приложений (по крайней мере Delphi и Access), следующий запрос может использоваться, чтобы найти недавно вставленную строку:
SELECT * FROM tbl_name WHERE auto IS NULL;
Если Вы сталкиваетесь с трудностями с MyODBC, Вы должны сделать файл протокола менеджера ODBC (файл регистрации, который Вы получаете при запросе файлов регистрации из ODBCADMIN) и протокол из MyODBC.
Чтобы получить протокол из MyODBC, Вы должны сделать:
myodbcd.dll
, а не
myodbc.dll
. Самый простой способ делать это состоит в том, чтобы
получить myodbcd.dll
из дистрибутива MyODBC и скопировать на
место myodbc.dll
, которая, вероятно, находится в Вашем каталоге
C:\windows\system32
или C:\winnt\system32
.
Обратите внимание, что Вы, вероятно, захотите восстановить старый файл
myodbc.dll, когда закончите тестирование, поскольку он куда быстрее
myodbcd.dll
.
myodbcd.dll
.
Проверьте MyODBC trace file
, чтобы выяснить, что именно могло
пойти не так. Вы должны быть способны выяснить выданные запросы, ища после
строки >mysql_real_query
в файле myodbc.log.
Вы должны также попробовать дублировать запросы в mysql
monitor или admndemo
, чтобы выяснить, ошибка это
MyODBC или MySQL.
Если Вы выясняете, что что-то пошло неправильно, пожалуйста, пошлите только релевантные строки (максимум 36 строк) на адрес [email protected]. Пожалуйста, никогда не посылайте целый файл протокола ODBC или MyODBC!
Если Вы неспособны выяснить, что неправильно, последняя опция должна сделать архив (tar или zip), который содержит файл трассировки MyODBC, файл протокола ODBC и файл README, который объясняет проблему. Вы можете посылать это на ftp://support.mysql.com/pub/mysql/secret. Только в MySQL AB имеют доступ к файлам, которые Вы загружаете, и там будут очень аккуратны с данными!
Если Вы можете создать программу, которая также показывает эту проблему, пожалуйста, загрузите ее туда же.
Если программа работает с некоторым другим SQL сервером, Вы должны сделать файл протокола ODBC с описанием действий, когда Вы делаете точно ту же самую вещь на другом SQL-сервере.
Не забудьте, что подробная информация, которую Вы можете обеспечить авторам, повышает вероятность того, что они смогут решить проблему!
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |