В данной статье речь пойдет о нововведениях в последней, пятой, версии Delphi, связанных с интеграцией средств для работы с базами данных InterBase. А именно: о наборе компонентов под общим названием InterBase Express (IBX). Также рассматривается вопрос о целесообразности их использования.
Не секрет, что среди SQL-серверов InterBase не занимает первое место по производительности. И Oracle, и MS SQL Server будут, конечно, покруче, но, несомненно, существуют задачи, для которых и InterBase неплохо подходит. Принимая во внимание доступность (серверное и клиентское ПО InterBase поставляется вместе с Delphi с лицензией на пять пользователей), простоту установки, конфигурирования и администрирования, можно сказать, что спектр возможных областей применения InterBase достаточно широк: от изучения с его помощью технологии клиент-сервер до использования в основе относительно крупной информационной системы.
Подавляющее большинство приложений для работы с БД, написанных с помощью Delphi, используют Borland Database Engine (BDE). BDE представляет собой БД-энжин и связующее ПО для Delphi и некоторых других продуктов. Если приложение работает с каким-либо сервером БД, то еще используется SQL Links - набор DLL, функционирующих под управлением BDE. SQL Links эмулирует навигационные функции конкретного SQL-сервера, разрешая работать с ним привычным для борландовских приложений способом.
Таким образом, вместе со свежеприобретенной программой пользователю необходимо установить также и BDE. В этом нет ничего страшного, но если в системе уже были приложения, использующие BDE, то, насколько мне известно, существует вероятность возникновения проблем с этими приложениями из-за неполной совместимости между некоторыми версиями BDE.
InterBase Express не нуждается в BDE, он работает с СУБД InterBase без посредников. За счет этого достигается большая производительность и предоставляется доступ к продвинутым функциям сервера, недоступным ранее при использовании стандартных компонентов.
Следует отметить, что и прежде существовала возможность общаться с InterBase без помощи BDE. Можно было работать на уровне функций API-сервера, а можно было использовать продукты сторонних разработчиков, реализовавших, фактически, ту же функциональность, что и представляемый IBX. Например, набор компонентов FreeIBComponents, который, как видно из названия, является бесплатным, вместе со своими исходными текстами лежит на www.interbase.com/download, что говорит о признании его пригодности для определенных целей. Но лично меня отпугнули не уменьшающиеся от версии к версии списки исправляемых багов. Кстати, в исходниках InterBase Express написано, что именно набор FreeIBComponents "в некоторой степени лег в основу" IBX'а. Будем надеяться, что парни (а, может, и девушки) из Borland/Inprise серьезно поработали, и IBX не будет столь сырым.
К слову сказать, существует набор схожих компонентов и для СУБД Oracle (www.oracleobjects.com, вроде бы). Может, когда-нибудь в стандартной поставке Delphi появится и Oracle Express?
Далее следует описание новых IBX-компонентов, находящихся на вкладке InterBase. Хотя они имеют схожие имена с компонентами BDE, между ними существуют различия.
TIBDatabase используется для установления соединений с базой данных, которые могут включать в себя одну или более совместных транзакций.
В отличие от BDE, IBX контролирует транзакции с помощью отдельного компонента, а именно - TIBTransaction. Это позволяет разделять транзакции и соединения с БД. Таким образом, можно использовать преимущества двухфазного подтверждения изменений для транзакций, охватывающих несколько соединений с базами данных, а также иметь несколько транзакций в рамках одного соединения. Используя в конкретных ситуациях наиболее оптимальные опции транзакций, приложения, естественно, только выигрывают в производительности.
Следующие два компонента являются аналогами TTable и TQuery.
TIBTable применяется для получения "живого" набора данных (НД) по таблице.
TIBQuery используется для выполнения DSQL-операторов, получения НД, состоящего из нужных полей и записей одной или нескольких таблиц.
TIBDataSet аналогичен TIBQuery, за исключением того, что поддерживает "живые" НД. Это возможно благодаря свойствам SelectSQL, RefreshSQL, InsertSQL, UpdateSQL и DeleteSQL, наличие которых позволяет отказаться от совместного использования компонента TIBUpdateSQL.
TIBStoredProc следует использовать для выполнения хранимых процедур. Входные параметры для процедуры передаются через свойство Params этого компонента. Туда же помещается и результат, если он не превышает одной записи. Для хранимых процедур, которые возвращают более одной записи или SELECT-процедур, используется TIBQuery или TIBDataSet.
TIBSQL применяется для запуска SQL-операторов и получения данных с большой скоростью без накладных расходов на буферизацию данных и общение с data-aware-элементами управления. Это наиболее прямой способ доступа к данным InterBase'овских БД. TIBSQL следует использовать для операций, которые должны быть быстрыми и необъемными. Под это определение подходят, например, операции описания метаданных и перекачки данных из одной БД в другую.
TIBUpdateSQL. Полная аналогия с TUpdateSQL. Используется для обновления данных в НД, предназначенных только для чтения, полученных с помощью TIBQuery.
TIBSQLMonitor окажется полезен при разработке диагностических утилит для мониторинга взаимодействий приложения и InterBase-сервера.
TIBDatabaseInfo используется для получения различной информации о БД. Такой, например, как список пользователей, подключенных к БД в текущий момент, интервал чистки, версия ODS.
TIBEvents используется для регистрации приложением своего интереса в событиях, о которых уведомляет сервер, и асинхронной обработки этих событий. Такая система позволяет реагировать на изменения в БД, производимые другими приложениями, параллельно работающими с данной БД, без прямого взаимодействия с ними и без нужды регулярно "спрашивать" БД.
Итак, как видно из обзора, IBX-компоненты, наряду с полной поддержкой традиционных для дельфийских приложений способов работы с БД, привносят новую полезную функциональность, что не может не радовать приверженцев Delphi и InterBase, которые теперь стали еще дружнее.
Николай АРАПОВ,
nikaragua@mail.ru
Комментарии
Страницы
Он может создавать все что угодно, отправлять запросы, а процедуры не создает!
Нигде не могла найти ничего похожего!!!
ПОМОГИТЕ!!!
АЕВ(можно так?:))
Без всяких проблемм можно обращаться хоть к ста базам (*.gdb) из приложений. Только для каждой базы заводите свой набор компонент, если вы дельфиец или бульдозерист. Такой способ обязателен для выполнения не зависимо от версии. А вот изнутри, через внутренние механизмы - это не возможно. Это бы противоречило бы самой сущности сервера базы данных. Замечу - я говорю не о многофайловой одной базе, а именно разные базы данных.
Ну а по 6 версии - я ещё не решаюсь обращать на неё серьёзные взгляды. Ради пробы и любопытсва я на 6 Delphi и 6 IB нацарапал программульку платёжки печатать, когда у нас их новые потребовали (в июле наверное). Програмуля лихо работала, но две недели назад мигнул свет и была порвана таблица. Внутреннее повреждение структуры. Старые версии ничего подобного себе не позволяли. Правда, я старые версии не ставил в окальном варианте и на 98.
Jung
Мало информации! Опишите ваш случай и кусочк кода burv@tut.by
Jin
А Это кто это у нас тут попискивает? Ну а без шуток - если речь идёт о хранимых процедурах или тригерах - то их не возможно создать в приложении. ОНИ ДОЛЖНЫ БЫТЬ ОТКОМПЕЛИРОВАНЫМИ встроенным в IB компилятором. Это можно сделать или стандартным IB Windows ISQL, но гораздо удобней чудесной програмулей "Quick Desk" ребят из Новосибирска. После небольшой практики без этой игрушки чувствуешь себя голым на площади.Она тут: И хоть они и
http://www.ems-hitech.com/quickdesk/
И хоть они и денюшку просят - всё у них работает, да ещё как!
Как это нельзя создать процедуру в приложении? Берется TQuery и пишется "create procedure ...". И Query.ExecSQL ...
Попискивают мыши!!!
nnn
А ты nnn не пробовал их создавать сам? Запросы, создание триггеров - это считается одним запросом,а при создании процедур пишется несколько "строчек"
Ух ты! и Это работает! Прошу прощение за злостное недоизучение любимого продукта. Однако никогда мне не приходило в голову ваять хранимые процедуры из клиента. А я уже пять лет с ним в тесноте общаюсь.
Спасибо.
Пример:
CREATE PROCEDURE ELECT (
CODENO INTEGER
) RETURNS (
X INTEGER,
Y INTEGER
) AS
BEGIN
SELECT ELECT_X, ELECT_Y
FROM NAME_OB1
WHERE (CODE_N_O= :CODENO)
INTO :X, :Y ;
SUSPEND;
END
Причем все поля существуют и такая процедура была создана в базе(повторно, т.е. поверх я ее не создаю!!!)
У меня есть куча файлов в формате jpg
Мне надо их периодически загружать и показывать на форме.
В Дельфи есть TBitMap, но он не знает формата jpg.
Как мне его загрузить в TBitMap?????????
Сразу скажу: плодить кучу компонентов TImage я не хочу, да и картинки меняются, а каждый раз перекомпелировать прогу - глупо.
Во-вторых, перегнать картинки в формат bmp нельзя (неужто клиент будет сначала перегонять в bmp, а потом запускать мою прогу - тоже глупо).
Делал через Clipboard, но он копирует почему-то только маленькие картинки (и то не все). Может я чего неправильно делал?
Или подскажите другой способ?
Заранее благодарен.
Страницы