Примеры Delphi и C# из жизни

Примеры программирования на языках Delphi, C#

 




Скачать бесплатно книжки; Автомобиль Ford авто портал КарсГуру; купить кальян; СФ Индустрия ленточнопильный, оборудование станки плазменной резки; изготовление брошюр

Внедряем Firebird | Delphi

Почему-то считается, что для создания так называемых персональных баз данных идеально подходят такие форматы как dBase, Paradox, Access, а реляционные СУБД - это что-то невообразимо сложное и большое. Совершенно ничего не имею против первого, а хочу показать, что второе не такое уж сложное и большое, если использовать правильный сервер. Я буду говорить о Firebird - сервере реляционных баз данных, поддерживающем стандарт ANSI SQL-92 и работающем под Linux, Windows и множеством Unix платформ.

Наверное, как и многие, кто пишет программы в среде Delphi, я начал свое знакомство с миром SQL с сервера InterBase, который фирма Борланд любезно включила в состав дистрибутива своей среды разработки. Не знаю почему, но с тех пор - InterBase, а сейчас Firebird, моя первая любовь в среде баз данных. Сервер Firebird создан на основании открытых исходных текстов InterBase, и весьма основательно отличается от родителя, а в скором будущем произойдет слияние двух популярных версий сервера InterBase - Firebird и Yaffil. Еще одно преимущество - оригинальный InterBase от Борланд уже давно стал платным, а Firebird - нет.

Свежую сборку под различные ОС также как и исходные тексты всегда можно найти по следующему адресу: http://firebird.sourceforge.net/. C версии 1.5 сервера Firebird произошли значительные изменения, по сравнению в версией 1.0.х: движок переписан на С++, добавлена библиотека внедренного (embedded) сервера, расширен синтаксис языка, как обычно, исправлены старые ошибки, добавлены новые. Также, теперь Firebird полностью отделен от своего предка (Interbase): переименованы все основные модули сервера и клиентские библиотеки. Таким образом, появилась возможность работы на одной машине как с оригинальным InterBase, так и с Firebird. Раньше имена модулей Interbase и Firebird были одинаковыми, в связи с чем и возникали проблемы.

Firebird может быть использован как для создания малых баз данных для использования в домашних условиях, так и для больших организаций, обеспечивая надежность и скорость обработки данных. Многие говорили, ну вот - для работы с базой надо еще и сервер за собой тягать: он и место на диске занимает и в памяти постоянно находится, даже когда не нужен для работы.

Теперь об этих <страхах> можно спокойно забыть. С версии 1.5 Firebird получил возможность работать в качестве embedded (англ. внедренный) сервера, то есть для работы с базами данных нет необходимости иметь запущенный сервер, вся функциональность умещается в одной динамически загружаемой библиотеке. Внедренный сервер обладает теми же особенностями и предоставляет приложению тот же API, что и обычный. Он разработан, чтобы работать как часть существующего приложения.

И что же, мы <безвозмездно, то есть даром> получаем персональную базу данных со всеми возможностями передовых клиент-серверных технологий, таких как хранимые процедуры, триггеры, транзакции. И все это великолепие занимает около двух с половиной мегабайт (естественно, без учета вашей программы и файла базы данных), что значительно меньше примерно восемнадцати мегабайт установленного БДЕ, который обычно используется для доступа к БД dBase, Paradox. Можно возразить, что для небольшой локальной базы не сильно-то и нужны все эти триггеры, транзакции и хранимые процедуры. Может и так, но почему бы один раз правильно не спроектировать базу данных и предоставить серверу самому заниматься управлением целостностью и непротиворечивостью базы.

Теперь немного о том, как настроить для работы то, что так красиво звучит.

Внедренный сервер - это полностью функциональный сервер, который разработан в виде DLL и имеет те же функциональные возможности, что и обычный сервер Firebird. Просто возьмите файл fbembed.dll из дистрибутива, переименуйте его в fbclient.dll или gds32.dll, в зависимости от настроек соединения вашей программы и скопируйте полученный файл в каталог с вашей программой - и все (ну, почти все). Строка подключения к базе данных в ваше программе должна содержать абсолютный путь к локальной базе данных или алиас БД, если он указан в файле конфигурации aliases.conf. Практически, ваше приложение может не знать, работает ли оно с встроенным или обычным сервером БД.

При запуске ваша программа будет использовать внедренный сервер в качестве клиентской библиотеки. При этом можно запускать несколько различных приложений, использующих внедренный сервер, без каких-либо конфликтов между ними, также не обязательно выгружать работающий InterBase или Firebird сервер. Правда, вы не сможете получить доступ к одной базе из нескольких приложений, так как внедренный сервер блокирует базу для эксклюзивного доступа, но ведь для локальной базы нам и не нужен доступ от нескольких клиентов. Тем более, что всегда остается возможность использовать обычный Firebird. Ну, а если есть необходимость использовать библиотеки INTL (поддержка национальных кодировок) или UDF (функции, определяемые пользователем), их необходимо скопировать в каталоги INTL или UDF каталога вашей программы, повторяя структуру каталогов обычного сервера Firebird. Также в каталог с программой можно поместить файл конфигурации firebird.conf и файл сообщений firebird.msg.

Таким образом, мы получаем следующую структуру каталогов:
 Каталог моей программы application.exe 
 Каталог моей программы fbclient.dll или gds32.dll 
 Каталог моей программы firebird.conf 
 Каталог моей программы firebird.msg 
 Каталог моей программы intlfbintl.dll 
 Каталог моей программы udffbudf.dll 



А теперь немного о грустном - плохие новости для любителей безопасности: внедренный сервер не использует в работе базу данных безопасности security.fdb, поэтому любой пользователь может подключиться к любой базе данных, правда, привилегии (роли) пользователя по-прежнему проверяются.

В заключение, хочу сказать, что с Firebird мы получаем отличную возможность для разработки мощных и надежных, быстрых и эффективных локальных баз данных используя всю мощь языка структурированных запросов не инсталлируя мега- и гига- байты дополнительных файлов, а используя всего несколько дополнительных библиотек. И все это совершенно бесплатно.