![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
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), распаковывать его с помощью В Windows NT Вы можете получать следующую ошибку при попытке установить
MyODBC: Проблема в этом случае состоит в том, что некоторая другая программа
использует ODBC, а также из-за того, как неудобно устроена Windows, Вы не
можете в этом случае установить новые ODBC-драйверы программой установки
Microsoft ODBC setup. В большинстве случаев Вы можете продолжать установку,
нажав кнопку Обратите внимание, что имеются другие опции конфигурации на экране
MySQL (trace, don't prompt on connect, etc), которые Вы можете опробовать,
если сталкиваетесь с проблемами. Имеются три возможности для определения имени сервера в Windows95: Пример того, как заполнить поля в Значение для поля Вы не должны определить значения для полей Если номер порта явно не задан, используется заданный по умолчанию порт
(3306). Если Вы определяете опцию Можно определять следующие параметры для MyODBC в разделе
Параметр option используется, чтобы сообщить MyODBC, что
клиент не на 100% ODBC-совместим. В Windows обычно устанавливаются опции на
экране соединения, но можно также устанавливать это в параметре option.
Следующие опции перечислены в том же самом порядке, в каком они появляются на
экране соединения MyODBC: Если Вы хотите иметь много опций, Вы должны сложить вышеупомянутые флажки.
Например, установка option в 12 (4+8) дает Вам отладку без ограничений пакета.
По умолчанию MYODBC.DLL компилируется для оптимальной
эффективности. Если Вы хотите отладить MyODBC (например,
чтобы включить трассировку), Вы должны взамен использовать
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, пожалуйста, напишите об этом на
myodbc@lists.mysql.com! С некоторыми программами Вы можете получать ошибку подобно:
Большинство программ должны работать с MyODBC, но для
каждой из тех, что перечислены ниже, это было проверено. Общая проблема: как получить значение автоматически сгенерированный ID из
Или, если Вы только собираетесь вставлять ID в другую таблицу, Вы
можете сделать так: Для пользы некоторых ODBC-приложений (по крайней мере Delphi и Access),
следующий запрос может использоваться, чтобы найти недавно вставленную строку:
Если Вы сталкиваетесь с трудностями с MyODBC, Вы должны
сделать файл протокола менеджера ODBC (файл регистрации, который Вы получаете
при запросе файлов регистрации из ODBCADMIN) и протокол из
MyODBC. Чтобы получить протокол из MyODBC, Вы должны сделать: Проверьте Вы должны также попробовать дублировать запросы в Если Вы выясняете, что что-то пошло неправильно, пожалуйста, пошлите
только релевантные строки (максимум 36 строк) на адрес
myodbc@lists.mysql.com.
Пожалуйста, никогда не посылайте целый файл протокола ODBC или MyODBC! Если Вы неспособны выяснить, что неправильно, последняя опция должна
сделать архив (tar или zip), который содержит файл трассировки MyODBC, файл
протокола ODBC и файл README, который объясняет проблему. Вы можете посылать
это на
ftp://support.mysql.com/pub/mysql/secret. Только в MySQL AB имеют доступ
к файлам, которые Вы загружаете, и там будут очень аккуратны с данными! Если Вы можете создать программу, которая также показывает эту проблему,
пожалуйста, загрузите ее туда же. Если программа работает с некоторым другим SQL сервером, Вы должны сделать
файл протокола ODBC с описанием действий, когда Вы делаете точно ту же самую
вещь на другом SQL-сервере. Не забудьте, что подробная информация, которую Вы можете обеспечить
авторам, повышает вероятность того, что они смогут решить проблему!
13 Поддержка MySQL ODBC
13.1 Как ставить MyODBC
WINZIP
или другой
подобной программы и выполнить файл SETUP.EXE
.
An error occurred while copying C:\WINDOWS\SYSTEM\MFC30.DLL. Restart
Windows and try installing again (before running any applications
which use ODBC)
Ignore
, чтобы копировать остальную часть файлов
MyODBC. Если это не работает, решение состоит в том, чтобы перезагрузить Ваш
компьютер в safe mode (выберите это, нажимая F8 перед запуском Windows после
перезагрузки), установить MyODBC и перезагрузиться назад в
нормальный режим работы.GRANT
. Подробности в разделе "10.1
Синтаксис GRANT
и REVOKE
".
13.2 Как заполнять поля в
программе администрирования ODBC
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. Однако, если Вы это сделаете, значения будут использоваться
как значения по умолчанию позже, когда Вы попытаетесь сделать соединение.
Тогда их можно поменять.Read options from C:\my.cnf
, группы
client
и odbc
будут читаться из файла
C:\my.cnf.13.3 Параметры соединения для 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.
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 Добавляет некоторые дополнительные проверки
безопасности (обычно не надо, но...). MYODBCD.DLL
. Чтобы установить этот файл, скопируйте
MYODBCD.DLL взамен установленной библиотеки MYODBC.DLL
.
13.4 Как сообщать о проблемах с MyODBC
Another user has modifies the record that you have modified
.
В большинстве случаев это может быть решено следующим образом:13.5 Программы, работающие с 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
.13.6 Как получать значение столбцов с
AUTO_INCREMENT
в ODBCINSERT
. С ODBC Вы можете делать что-нибудь вроде этого
(считается, что auto
является полем с
AUTO_INCREMENT
):
INSERT INTO foo (auto,text) VALUES(NULL,'text');
SELECT LAST_INSERT_ID();
INSERT INTO foo (auto,text) VALUES(NULL,'text');
INSERT INTO foo2 (id,text) VALUES(LAST_INSERT_ID(),'text');
SELECT * FROM tbl_name WHERE auto IS NULL;
13.7 Сообщение о проблемах с 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.
Найди своих коллег! |