Программы, исходники, документация C++Builder
  бесплатный софт

SoftHolm.com     Программы     Статьи    Книги    Mobile    Доска объявлений    Игра    Forex     RSS




MIDAS и cоздание "маленького" приложения с базой данных без использования BDE

Наталия Елманова
Компьютер Пресс - CD, 1999, N 4
© Copyright N.Elmanova & ComputerPress Magazine.

Здесь представлены фрагменты этой статьи в обработке
авторов SoftHolm для работы в среде C++ Builder 5 c исходниками.   Загрузить.



Нередко разработчики небольших приложений, использующих одну или несколько таблиц, испытывают некоторые удобства при их поставке. Эти неудобства связаны с необходимостью установки библиотеки BDE на компьютер пользователя.

В общем случае, если приложение использует базы данных, следует, помимо приложения, установить на компьютер пользователя библиотеку Borland Database Engine. Установка этой библиотеки заключается в копировании файлов этой библиотеки на компьютер пользователя, внесении сведений о ней в реестр, установке пиктограммы для утилиты конфигурации BDE, а также настройке псевдонимов и языковых драйверов для данного приложения.

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

Еще одна проблема может быть связана с несовпадением версий BDE. Если с момента выхода используемой версии BDE прошло какое-то время, есть риск заменить старой версией BDE более новую и тем самым нарушить работоспособность использующих ее приложений.

Отметим также, что корректное написание дистрибутива приложения далеко не всегда является гарантией дальнейшей корректной его работы. Например, не все пользователи грамотно деинсталлируют приложения. Часто бывает, что ставший ненужным каталог просто стирается (в том числе и каталог с BDE). При этом скорее всего (исключения бывают очень редко) соответствующая ветвь реестра сохранится, и инсталляционное приложение будет сообщать пользователю, что BDE на данном компьютере уже есть.

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

По этим причинам разработчики таких приложений нередко изобретают свои форматы данных, дабы не использовать BDE вообще, а просто считывать файл с диска.

Как ни парадоксально, разработчики, занимающиеся созданием подобных приложений, даже имея клиент-серверные версии Delphi или C++Builder, просто не обращают внимания на страницу MIDAS палитры компонентов этих средств разработки, считая, что эти компоненты - не для их задач. А ведь именно там и содержится компонент TClientDataSet, позволяющий создать такой файл и использовать его.

Компонент TCLientDataSet обычно используется в "тонких" клиентах серверов доступа к данным. Подобные приложения широко используют кэширование данных в оперативной памяти рабочей станции и нередко учитывают возможность разрыва связи с сервером доступа к данным. Соответственно компонент TCLientDataSet позволяет сохранить содержимое своего кэша в файле и загрузить его оттуда. После этого можно просто забыть о сервере доступа к данным и работать только с этим файлом (его можно даже редактировать). Библиотека BDE при этом не нужна - "тонкие" клиенты ее не используют (в том числе и отчуждаемые "тонкие" клиенты).


Создадим пример такого "маленького" приложения.

Есть две возможности создания таких "маленьких" приложений.

1) Самый простой из них - хранить данные непосредственно в исполняемом файле приложения (если их объем невелик). Данные нельзя будет редактировать. Для этого создадим новый проект и поместим на его главную форму компонент TTable, компонент TDataSourse и компонент TClientDataSet, компонент TDBGrid и компонент TDBNavigator (последние два компонента нужны только для контроля и просмотра данных и, по существу, совершенно не обязательны). Установим следующие свойства этих компонентов:

КомпонентСвойствоЗначение
DBGrid1DataSourceDataSource1
DBNavigator1DataSourceDataSource1
Table1DatabaseNameBCDEMOS (или DBDEMOS)
TableNamecustomer.db
Activetrue
DataSource1DataSet Table1


Далее выберем из контекстного меню компонента ClientDataSet1 опцию Assign Local Data и в появившемся списке выберем Table1:

После этого в кэш компонента TCLientDataSet будут загружены данные.

Теперь из контекстного меню этого же компонента выберем опцию Save To File и в появившейся диалоговой панели открытия файла введем имя файла data.cds, в котором будут храниться данные из кэша. Итак, файл с данными готов.

Затем надо удалить с формы компонент Table1 - он больше не нужен.

В компоненте DataSource1 свойство DataSet переключаем на ClientDataSet1.

Из контекстного меню компонента TClientDataSet нужно выбрать опцию Load From File и выбрать имя файла data.cds, сохраненного прежде.

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

Если скомпилировать такое приложение, его можно передать пользователю. Единственное, что требуется добавить в комплект поставки - файл midas.dll из каталога Winnt\System32 (или Windows\System) и, возможно, dbclient.dll.

Отметим, что, помимо настольных приложений, сохраненные в файле кэшированные данные могут быть использованы при создании демо-версий и прототипов клиент-серверных приложений, где затруднена или исключена в силу лицензионных ограничений поставка полноценной версии СУБД.



2) Вторая возможность создания таких "маленьких" приложений - хранить данные отдельно от исполняемого файла приложения (объем данных может быть велик). Данные можно будет редактировать.

Для этого создадим новый проект и поместим на его главную форму один компонент TTable, один компонент TDataSourse и один компонент TClientDataSet, один компонент TDBGrid и один компонент TDBNavigator (последние два компонента нужны только для контроля и просмотра данных и, по существу, совершенно не обязательны). Установим следующие свойства этих компонентов:

КомпонентСвойствоЗначение
DBGrid1DataSourceDataSource1
DBNavigator1DataSourceDataSource1
Table1DatabaseNameBCDEMOS (или DBDEMOS)
TableNamecustomer.db
Activetrue
DataSource1DataSet Table1
ClientDataSet1ProviderNameProvider1


Далее выберем из контекстного меню компонента ClientDataSet1 опцию Assign Local Data и в появившемся списке выберем Table1:

После этого в кэш компонента TCLientDataSet будут загружены данные.

Теперь из контекстного меню этого же компонента выберем опцию Save To File и в появившейся диалоговой панели открытия файла введем имя файла - "data", в котором будут храниться данные из кэша (data.cds). Итак, файл с данными готов.

Удаляем с формы компонент Table1 - он больше не нужен. В компоненте DataSource1 свойство DataSet переключаем на ClientDataSet1.

Добавим на форму компонент TDataSetProvider. Установим значение его свойства DataSet равным ClientDataSet1.

Затем свойство ProviderName компонента ClientDataSet1 установим равным DataSetProvider1.

Выполним метод LoadFromFile компонента TClientDataSet в обработчике события OnCreate формы.

ClientDataSet1->LoadFromFile("data.cds");

То есть таблица с данными подключается на этапе создания формы.

Cледует дополнительно позаботиться о пересылке отредактированных данных обратно в исходную таблицу с помощью метода SaveToFile компонента TClientDataSet. Обычно для этой цели к форме добавляют какой-либо интерфейсный элемент, инициирующий выполнение этого метода. Иногда этот метод добавляют к обработчику события AfterPost компонента TClientDataSet. Этот код имеет вид:

ClientDataSet1->SaveToFile("data.cds", dfBinary);

Если скомпилировать такое приложение, его можно передать пользователю. Единственное, что требуется добавить в комплект поставки - файл midas.dll из каталога Winnt\System32 (или Windows\System) и, возможно, dbclient.dll.

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



В качестве примера реализации данной технологии можно рассмотреть следующую программу: Программа ”String Commander”. Упрощает регистрацию и работу с веб-серверами. Облегчает
работу с часто используемыми строками текста паролями, адресами интернет и E-mail.


  Автор   SoftHolm.    Загрузить




Rambler's Top100 Заработай на своем сайте Рейтинг@Mail.ru