Программы, работающие с 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!

  • 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=16384 в строке подключения ODBC или установить опцию Change BIGINT columns to INT в окне подключения 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.