05.04.2009

Компонентная библиотека Delphi Zeos

Официальный сайт http://zeos.firmos.at. Австрийский домен :). Текущая стабильная версия 6.6.4.

В библиотеке реализован набор объектов для универсального доступа к различным СУБД. По смыслу БДЕ, но полностью открытая и из внешних библиотек нужны только клиентские библиотеки СУБД - остальное Delphi код. Структура несколько скопирована с jdbc. Оно даже называется местами zdbc :).

Понадобилась компонентная библиотека, как минимально зависимый от внешних библиотек, но при этом универсальный механизм доступа к данным. DBExpress как альтернатива не впечатляет закрытостью конкретных реализаций и ограничениями многих драйверов.

  1. Впринципе, все довольно быстро скомпилировалось из исходников, только пути поиска пришлось понастроить. Я, видимо, скопировал не самый полный набор модулей - в него не входили тесты, поэтому тестовые проекты компилировать было не из чего, хотя они "заявлены".

  2. Скомпилированная библиотека - набор bpl, одна из которых - дизайнерская; набор объектных dcu\dcp модулей и, разумеется, исходники. Немного примеров - не смотрел.

  3. Палитра компонентов скудная, но я ничего особенного и не ожидал, да и не особо надо было :).

  4. Подключиться пробовал к Interbase. Простое приложение: Connection + Query + Grid. Заработало не сразу :) - нарвался на базу IB 4.2 - они не поддерживаются, только начиная с IB 5.

  5. Не очень понравилась "разномастность" Interbase. Несколько "драйверов" под разные клоны и версии. Впрочем, IB 7-7.5 не выделен отдельно. Вероятно, не поддерживается.

  6. Не проверял, но похоже для "прямого" доступа к MSSQL используется та же библиотека, что и в БДЕ (те уже не поддерживается). Впрочем есть "мостик" к ADO, который рекомендуется использовать когда нет собственной "прямой" реализации.

  7. Аналогично, Oracle заявлен 9й версии, что ныне уже старо, впрочем совместимость и поддержка со стороны Oracle должна быть.

  8. Похоже нет подготовки запросов. Это достаточно серьезный минус - пакетные операции с данными одна из областей моих интересов :).

Дальше компоненты были испробованы для осуществления переноса данных по типу BatchMove. Выявились дополнительные проблемки.

  1. Не понятная ситуация с ForwardOnly наборами. С одной стороны, в исходниках местами просматривается поддержка Forward Only, с другой стороны, не понятно как даже создать такой набор. В итоге после возни c исходниками выяснилось, что Forward Only сделать можно, но для этого необходимо слегка править компоненты. Причем править приходится и базовый класс TZAbstractRODataset, который как-раз меньше всех заточен на такую работу, поскольку запросто оперирует буферами DataSet (а в ForwardOnly предполагается только одна текущая запись).

  2. Реализация метаданных Oracle просто прелесть :). Я сначала думал, что память течет, ибо ее потребление было каким-то странным. По ходу выяснилось, что она действительно течет, но не в тех объемах :). Проблема оказалась в том, что авторы почему-то не учитывают схему по умолчанию при осуществлении выборки метаданных, а на сервере у меня 50 схем 8) с одноименными таблицами. В итоге просто запрос метаданных колонок таблицы выливается в набор данных с тысячами строк (не говоря уже о том, что вообще не очень понятно как это может корректно работать).

  3. И о мелких глюках. Потеря памяти при работе c Oracle blob имеет место быть. Так же Interbase ResultSet оказался не устойчив к повторному вызову закрытия.

Архив с исправленными модулями (40Кб)

Hosted by uCoz