Очень частое критическое замечание: Vo2Ado для MySQL не удобен, т.к. сначала надо ставить, а потом – настраивать драйвер каждому пользователю… Таким критикам, я с полной ответственностью заявляю: если подойти «с умом», то достаточно простой инсталляции стандартного
ODBC-драйвера MySQL и ничего настраивать не надо! Хотя, самой установки драйвера, конечно же – не избежать. (За исключением MS SQL – здесь установка драйвера не нужна, т.к. он автоматически ставится вместе с Windows). Как так можно сделать – отдельная тема. Так что, Vo2Ado – рулит!
С некоторых пор, я работаю преимущественно с MySQL. И, общаясь на разные темы, я вышел на Александра Белова (г. Рига), который помог мне с очень многими вопросами. А главное – заронил мысль, что «не святые горшки обжигают». Т.е., при некотором желании и упорстве – любому программисту CA-Visual Objects (КаВо – по-русски) вполне по силам написать свою библиотеку для работы со своим любимым SQL.
Именно так он со своим товарищем сделали для себя библиотеки по работе с MySQL, FB и SQLite. Тут мне стало очень любопытно, и я попросил прислать хоть кусочек кода по работе с MySQL. Что и получил. Рассмотрев пример, я решил на его основе (а пример был сделан под MySQL 4.xx) сделать свой класс, но похожий на Vo2Ado.
Почему так? Во-первых, чтобы не переписывать код своих программ. Во-вторых, а если захочется вернуться на Vo2Ado (купив, например, Vo2Ado28). А, в-третьих – стандарт ADO достаточно
неплох. Короче – мне нужна полная совместимость.
Ещё я нашёл похожую, но, к сожалению, нерабочую библиотеку Hernando Patino
mySQL4VO_1007. Hernando сделал своё творение на основе стандартной библиотеки КаВо «SQL Classes». Что, для одних, может быть – и хорошо, а для других – не очень. Почему библиотека нерабочая? Во-первых, она недоделана, содержит ошибки (просто так в КаВо28 не собирается), а, во-вторых – она сделана под MySQL 4.хх. А, как известно, описание функций и структур в библиотеке MySQL для версий 4 и 5 – отличаются.
Похоже, что Hernando Patino в своём детище решил сделать полную «кальку» библиотеки SQL Classes, что заставило его перенести почти все функции и структуры из библиотеки libmysql.dll. Но, т.к. MySQL в четвёртой версии бурно развивался – он не поспевал за изменениями и, мне кажется, надорвался. Последняя его публично выложенная версия 1.0.0.7. Надеюсь, что я ошибаюсь.
Подробно рассказывать, что и как я сделал в своей библиотеке – не буду, т.к. это уже формат статьи. Но, постараюсь что-то вкратце осветить.
Первое, с чем я определился – это то, что в основе должна быть стандартная библиотека libmysql.dll (connector C). И все функции – будут браться из неё, см. соответствующий раздел
MySQL_Developer_Zone. Функций и структур должно быть немного, только то, что реально используется. Потом, я определил основные классы, которые использую в своих программах (а у меня всегда минимум классов Vo2Ado). У меня их вышло три: AdoConnection, AdoCommand и AdoRecordSet. AdoServer, как нестандартный – решил не использовать. Тем боле, что когда мне нужно индексировать данные, делать «хитрый» поиск и т.д. и т.п. – я применяю другие классы, сделанные с помощью AdoRecordSet.
Следующий момент – я решил внести некоторые правки и добавить новые возможности:
- Решить вопрос с разностью представления данных для полей типа Date, DateTime и TimeStamp (дата, объект, строка). И сделать возможность этим управлять.
- Решить вопрос с «глюком» отображения больших целочисленных полей (в Vo2Ado27 поля типа int, long int и т.п. выводятся как строка).
- В популярном классе «bBrowser» с некоторых пор заявлена возможность использования AdoRecordSet (но bBrowser с AdoRecordSet из Vo2Ado27 реально не работает) – захотелось это исправить!..
- Решил поправить класс AdoDateTime (из Vo2Ado27). Т.к. он не умеет работать (инициализироваться) со стандартной SQL-строкой формата TimeStamp.
Всё это мне удалось! :))
По первому вопросу – я добавил методы для управления свойствами полей:
oConn:__ModeDateTime := #AsDate
oConn:__ModeTimeStamp := #AsString
Допустимые режимы: #AsString, #AsDate, #AsDateTime
Значения по умолчанию:
для DateTime DateTime
для TimeStamp String
А по третьему вопросу – вынужден был дописать методы:
DbStruct, Deleted, FieldPos, FieldSpec, FieldSym, GoBottom, GoTo, GoTop, LastRec, Notify, RecCount, RecNo, RegisterClient, ResetNotification, UnRegisterClient и Used.
И скорректировать EoF, BoF и FieldGet.
Что ещё сделал? Для класса AdoConnection – добавил метод задания опций соединений. (См. описание API-фунции mysql_options() из libmysql.dll). С помощью неё можно, например, задать кодовую страницу клиента:
LOCAL oConn AS AdoConnection
. . .
. . .
oConn:__Options( MYSQL_SET_CHARSET_NAME, "cp1251" )
Это нововведение позволяет отказаться от любых настроек в MySQL для клиента, например, как рассказано
здесь. Таким образом – всё в Ваших руках!
А ещё, для класса AdoRecordSet сделан очень удобный метод Data ( AdoRecordSet:Data ), который сразу позволяет получать все данные выборки, не прибегая к GetRows(). Аналогично классу bArrayServer ( bArrayServer:Data ).
Попутно, в свою библиотеку (msMySQL) я вложил ещё один класс – msLogFile (сделан на основе LogFile). Этот класс не меняет принудительно расширение .log-файла на стандартное. Меня это всегда доставало. Плюс, у него появился новый режим использования. При указании, во время инициализации, в качестве параметра «lOpen» значения TRUE – файл остаётся открытым до окончания работы с ним (Close()). Это очень удобно в случае, когда в вашей программе постоянно что-то пишется в файл отчёта. Стандартный же класс, всегда открывает-закрывает файл при каждой операции чтения-записи. А это, при включённом антивирусе – солидные задержки времени!
Достоинства:
- Почти полная совместимость с Vo2Ado, но работает быстрее.
- Установка и настройка драйверов MySQL – не нужна.
- Настройка MySQL для работы с клиентом – не требуется.
- Бесплатность
Оставшиеся проблемы:
- Как и в Vo2Ado, не разрешены пакетные запросы. Включить можно, но нужна доработка кода и потеряется некоторая совместимость с Vo2Ado.
- Как и в Vo2Ado, не обрабатываются переменные типа LONG LONG. Вещь достаточно редкая и КаВо это всё равно напрямую не понимает. Но решить это можно, только придётся, опять же, дописывать код и попутно править, например bBrowser и другие классы, где это может использоваться напрямую
В общем, кому интересно – добро пожаловать в раздел поддержки! Скачивайте библиотеку msMySQL, тестируйте и наслаждайтесь. Пользование – бесплатное. Сообщения о «глюках» и недоделках – приветствуются. Писать здесь.
Comments
Эта тема обстоятельная, и