![]() | ![]() | ![]() |
| Главная | Новости | Форум | Документация | Купить | Скачать | Клиенты | Ссылки |
| Рады приветствовать вас на страницах нашего обновленного сайта. За прошедшие два с половиной месяца мы не стояли на месте, поскольку конкуренция - весьма эффективный стимул к движению вперед. Если в марте 2000 года IBProvider был единственным рабочим вариантом OLEDB для IB, то сейчас существует уже три официальных драйвера этого типа. Кроме того, новые драйверы ODBC совместно с MSDASQL (OLEDB провайдер для ODBC) тоже, с нашей точки зрения, ведут борьбу за место под этим солнцем. Пока единственным нашим отличием от других является то, что мы не ограничиваемся только одним провайдером и ADO как средством доступа к нему. Разработанная нами библиотека классов для С++ позволяет полностью использовать возможности OLEDB, а не довольствоваться профильтрованными через ADO. При этом затраты на написание кода идентичны, хотя в это и трудно поверить. Мы не стали останавливаться и на этом. На основе этой библиотеки был написан TOLEDBDataSet. И хотя это была "детская" попытка, она показала, что OLEDBExpress - это реальность, хотя и отдаленная по времени. "Побочным" эффектом всего этого направления является более полная совместимость со спецификацией OLEDB, поскольку пока ADO сглаживает и устраняет недочеты нижнего уровня. Но в будущем это наверняка изменится и требования станут более жесткими. Поэтому мы не особенно расстраиваемся из низких темпов работы. Затраты окупаются уже сейчас. Итак. Изменения в IBProviderНа текущий момент, благодаря тотальной реконструкции, мы сдвинулись с мертвой точки в отношении управления результирующими множествами. Теперь провайдер может самостоятельно обеспечивать произвольный доступ к выбранному множеству, и начинает использовать временный файл, если превысит лимит на допустимый объем памяти (не зависимо от режима доступа). По умолчанию создается объект с последовательным однонаправленным доступом. cmd.CommandText="select * from people" cmd.Properties("IRowsetLocate")=true ' разрешаем произвольный доступ set rs=cmd.Execute После этого можно пользоваться методами Recordset: MoveLast, MoveFirst и т.д. Другое большее изменение касается команд. Поддержка именованных параметров вещь достаточно тривиальная, если не принимать во внимание, что ADO наотрез отказывается передавать эти имена в провайдер. Поэтому, имя указываемое в Command.CreateParameter - только для удобства пользования ADO, не более. Хорошо, что InterBase имеет возможность самостоятельно определять типы параметров запроса, которые провайдер, вместе с именами, и возвращает ADO компонентам. cmd.CommandText="select * from people where id<id" cmd("id")=100 set rs=cmd.Execute Для контроля и выявления ошибок в тексте запроса у команд определено свойство "prepare stmt", в котором хранится преобразованный текст запроса с '?' вместо имен. При тестировании была выявлена одна неприятность: в ADO нельзя использовать имена для BLOB параметров. Технический аспект этой ошибки известен - ADO пытается установить информацию о параметрах обратно, но без указания имен. Провайдеру это не нравится. Выходом является использование неименованных параметров ('?'). Смешивать в тексте запроса именованные и неименованные параметры запрещено. В процессе определения типов параметров, провайдер проводит контроль одновременного использования разных типов для одного имени. Определено четыре группы, внутри каждой определяется "наибольший" тип, который и будет назначен именованному параметру:
Для одного имени не допускается использование типов из разных групп. При выполнении проводится сравнивание числа параметров, определенных провайдером, с числом описаний и значений параметров, переданных клиентом. В случае ошибки возвращается вразумительное объяснение. Определение параметров проводится только по требованию. Вы можете самостоятельно определить их описание (например, через Command.Parameters.Append) для уменьшения числа запросов к InterBase. Как уже говорилось, в ADO для именованных параметров это не работает. С этим связана еще одна проблема - если вы повторно используете запрос с именованными параметрами, не закрывая ранее созданное результирующее множество, ADO создаст новую OLEDB-команду, но просить определить типы параметров уже не будет. Короче, число недостатков сравнивается с числом достоинств. Кроме "полезного" кода в провайдере появилась новая партия "параноидальных" ловушек на ошибки. По нашим наблюдениям, на скорость это мало влияет. Зато является гарантией качества и более простого способа выявления виноватого. Тем не менее, на этот раз вы можете скачать и "чистый" код. Наши изуверские тесты ничего не нашли и мы решились на этот шаг. На этот раз начальство дало свое согласие, и вы получаете полноценную версию для IB6x. В том, что мы могли откомпилировать его и под IB5, можете убедиться сами: в каталоге lib\interbase находятся обновленные исходные тексты низкоуровневой библиотеки доступа к IB. Но защиты до сих пор нет. Поэтому наши правила игры продолжают действовать. Как уже было сказано - существует свобода выбора. Более того, на базе нашей библиотеки вы можете написать свое творение. Новое в клиентской библиотекеОсновным изменением является начало перехода на STL. Этот процесс затрагивает достаточно много файлов, поэтому полностью он завершится только в следующем тысячелетии. А использование Borland расширений в виде __property и __closure делает процесс переноса на VC достаточно затруднительным. Хотя нет, для property в VC уже существует решение. Благодаря архитектурным особенностям STL, теперь для библиотеки можно определить собственный менеджер памяти. Исходя из аналогичного опыта с низкоуровневой библиотекой, использование отдельной Win32 кучи дает около 10 процентов увеличения скорости работы. Исходя из того, что новые возможности провайдера будут доступны только через изменения свойств его объектов, нужно иметь возможность это делать. Новый класс t_db_obj_props упрощает эту задачу до минимума. В процессе стыковки с VCL обнаружилось, что у большинства классов "душа нараспашку" и с их объектами можно делать даже то, что делать нельзя. Поэтому был определен новый класс t_db_base_row и изменено назначение t_db_base_dataset, в которых все стало на свои места. И наконец, наш новый "детеныш" - TOLEDBDataSet. С точки зрения профессиональных пользователей и создателей, компонент этой категории - достаточно ограниченный по функциональности и содержит потенциальные ошибки. Да и создается он динамически, а не в дизайнере. Но с другой стороны - главное начать. Возможно, кто-нибудь захочет занять эту нишу и создать OLEDBExpress. Примеры для работы с провайдером также постепенно трансформируются и расширяются, поскольку мы их используем для тестирования. Остальные новостиБыла выяснена причина сбоев MSDASQL, которая заключается в непереваривании параметров с типом DBTYPE_STR.Тип DBTYPE_BSTR проходит, но радости это не прибавляет. Как только решили эту проблему - возникли другие. Возможно, с 2.6 у нас что-нибудь получится. Обнаружили, что ADO и MSDASQL поддерживают "неофициальные" отношения, благодаря которым становится возможным использования ODBC от Intersolv. Использование драйвера от Алексея Карякина решило проблему с необходимостью указания Precision для параметров. Ради интереса был скачан провайдер для IB из Бразилии. Одно разочарование. Он честно объявлен как "Apartment", поэтому издеваться над ним мы не стали. Удалось только подключиться к базе, а потом он стал требовать имена для параметров (использовались '?'). Написан, по все видимости, на Delphi (на чем же еще?).На сайте www.ibphoenix.com этот провайдер гордо назван не beta - куда катится наш мир? Был скачан MDAC SDK 2.6. Судя по всему, в Microsoft решительно настроены относительно 64 битной платформы. В остальном, судя по количеству интерфейсов, мы обеспечены работой до конца жизни. Еще и детям останется. Интересно, они сами успевают их реализовывать? В IBProvider до сих пор используются интерфейсы из OLEDB 1.1. Полезной вещью оказался "Rowset Viewer", нашли ошибку в ловушке для ошибок :). На этом, пожалуй, и остановимся. В настоящий момент мы вернулись к нашему основному проекту, и, думается, до его завершения никаких сообщений о новых возможностях IBProvider не будет. Так что у наших конкурентов по OLEDB есть время где-то до марта 2001 года.
Дата публикации: 01.12.2000. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт http://www.ibprovider.com обязательна.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Сборка сайта № 3.0.0.1660 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||