Delphi и InterBase - братья навек

В данной статье речь пойдет о нововведениях в последней, пятой, версии 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

Версия для печатиВерсия для печати

Номер: 

13 за 2000 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Страницы

Аватар пользователя афанасьев Евгений Владимирович
Было бы интересно узнать ваше мнение по поводу работы с распределенными БД в InterBase 6.0, у меня возникла данная проблема при выборке данных из таблиц из разных БД.
Аватар пользователя Jung
В чем проблема: не работает Interbase, хотя запросы составляются вроде правильно, или не умеем составлять запросы?
Аватар пользователя Jin
Не могу создать процедуру Interbase SQL из приложения

Он может создавать все что угодно, отправлять запросы, а процедуры не создает!

Нигде не могла найти ничего похожего!!!

ПОМОГИТЕ!!!

Аватар пользователя Инкогнито
Ой! А я думал эта тема запретная на наших просторах! Тут оракулы всех поразгоняли, да Бил SQL-евской дубинкой машет, обещает свой сервер в каждый наш ларёк пихнуть и бесплатно придать к нему самосвал с инструкциями и лицензионными страшилками. Ну ладно! это лирика. А по делу

АЕВ(можно так?:))

Без всяких проблемм можно обращаться хоть к ста базам (*.gdb) из приложений. Только для каждой базы заводите свой набор компонент, если вы дельфиец или бульдозерист. Такой способ обязателен для выполнения не зависимо от версии. А вот изнутри, через внутренние механизмы - это не возможно. Это бы противоречило бы самой сущности сервера базы данных. Замечу - я говорю не о многофайловой одной базе, а именно разные базы данных.

Ну а по 6 версии - я ещё не решаюсь обращать на неё серьёзные взгляды. Ради пробы и любопытсва я на 6 Delphi и 6 IB нацарапал программульку платёжки печатать, когда у нас их новые потребовали (в июле наверное). Програмуля лихо работала, но две недели назад мигнул свет и была порвана таблица. Внутреннее повреждение структуры. Старые версии ничего подобного себе не позволяли. Правда, я старые версии не ставил в окальном варианте и на 98.

Jung

Мало информации! Опишите ваш случай и кусочк кода burv@tut.by

Jin

А Это кто это у нас тут попискивает? Ну а без шуток - если речь идёт о хранимых процедурах или тригерах - то их не возможно создать в приложении. ОНИ ДОЛЖНЫ БЫТЬ ОТКОМПЕЛИРОВАНЫМИ встроенным в IB компилятором. Это можно сделать или стандартным IB Windows ISQL, но гораздо удобней чудесной програмулей "Quick Desk" ребят из Новосибирска. После небольшой практики без этой игрушки чувствуешь себя голым на площади.Она тут: И хоть они и

http://www.ems-hitech.com/quickdesk/

И хоть они и денюшку просят - всё у них работает, да ещё как!

Аватар пользователя nnn
2Инкогнито

Как это нельзя создать процедуру в приложении? Берется TQuery и пишется "create procedure ...". И Query.ExecSQL ...

Аватар пользователя Jin
Инкогнито

Попискивают мыши!!!

nnn

А ты nnn не пробовал их создавать сам? Запросы, создание триггеров - это считается одним запросом,а при создании процедур пишется несколько "строчек"

Аватар пользователя Инкогнито
nnn

Ух ты! и Это работает! Прошу прощение за злостное недоизучение любимого продукта. Однако никогда мне не приходило в голову ваять хранимые процедуры из клиента. А я уже пять лет с ним в тесноте общаюсь.

Спасибо.

Аватар пользователя Jin
Я тоже так делала

Пример:

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

Причем все поля существуют и такая процедура была создана в базе(повторно, т.е. поверх я ее не создаю!!!)

Аватар пользователя nnn
Да не за что. Как, выехав к заказчику апгрейдить уже полноценную базу? Только так.
Аватар пользователя Виталя
Есть такая проблемка.

У меня есть куча файлов в формате jpg

Мне надо их периодически загружать и показывать на форме.

В Дельфи есть TBitMap, но он не знает формата jpg.

Как мне его загрузить в TBitMap?????????

Сразу скажу: плодить кучу компонентов TImage я не хочу, да и картинки меняются, а каждый раз перекомпелировать прогу - глупо.

Во-вторых, перегнать картинки в формат bmp нельзя (неужто клиент будет сначала перегонять в bmp, а потом запускать мою прогу - тоже глупо).

Делал через Clipboard, но он копирует почему-то только маленькие картинки (и то не все). Может я чего неправильно делал?

Или подскажите другой способ?

Заранее благодарен.

Страницы