Григорий дата публикации 17-09-2004 17:42 База данных без BDEПосвящается "старым программистам", которым переходить на Д6 - нет смысла,
а в Д7 - нет QReport.
Вы мечтаете о базе данных, которую можно копировать вместе с экзешкой в
любое место и, при этом, не устанавливать BDE на каждом компьютере?
Наверняка, Вы читали о технологии Midas, но не до конца - вам этого не
нужно было. Зря остановились на полпути - осуществление мечты было совсем
рядом.
90% того, что мы здесь будем делать, вы делали много раз с популярным
компонентом TTable, но на этот раз, вместо него, воспользуемся компонентом
TClientDataSet из закладки Midas в палитре компонентов.
Давайте создадим простейшее приложение, в котором будет база данных. Это
может быть обычный прайс-лист с полями: Товар, Оптовая цена, Розничная
цена.
Создайте новое приложение. На форму посадите DataSource1, ClientDataSet1,
DBGrid1 и DBNavigator1. DataSource1 свяжите с ClientDataSet1, как обычно
связывают DataSource с Table. DBGrid1 и DBNavigator1 свяжите с
DataSource1. Как видите - почти, ничего нового. Свойства и методы
компонента TClientDataSet, процентов на 90, совпадают со свойствами и
методами компонента TTable, но свойств DatabaseName и TableName здесь нет.
Здесь есть свойство FileName, где нужно указывать имя файла нашей базы
данных с расширением cds. Например: ProbaDB.cds. Когда мы работали с
компонентом TTable, то файлы базы данных создавали с помощью DateBase
Desktop. Здесь мы пойдем другим путем.
Сделайте двойной клик по ярлыку компонента ClientDataSet1, в открывшемся
редакторе полей, нажмите правую клавишу и выберите New field. Присвойте
имя первому полю и укажите тип - String. Таким же образом создайте поля
для обеих цен, но тип поля укажите Float. Когда укажите все поля нашего
файла, то щелкните правой клавишей по ярлыку компонента ClientDataSet1 и
укажите Create file. Еще раз щелкните правой клавишей по ярлыку
компонента ClientDataSet1 и укажите Save to file. Присвойте файлу имя:
ProbaDB.cds.
Если вы все сделали правильно, то можете выполнить эту программу и
убедиться, что эта программа полностью работоспособна. Файл ProbaDB.cds
должен быть в папке, в которой находится экзешка. В эту же папку
скопируйте библиотеку Midas.dll, она находится на вашем компьютере в папке
C:\WINDOWS\SYSTEM. Скопируйте эту троицу на любой компьютер, где не
установлен BDE и убедитесь, что он не нужен. Библиотека Midas.dll должна
быть в папке SYSTEM, так пишут в учебниках, но это не совсем так - она
может быть в папке, где находится экзешка. Весь ваш дистрибутив поместится
на одну дискету с большим запасом. Установка будет производиться обычным
копированием, как в старом, добром Досе.
Молодняк говорит, что начиная с Д6 не нужно уже копировать и библиотеку
Midas.dll, но нам, ветеранам, не лень, ведь, копирнуть один лишний файлик?
Если стандартные базы данных вы можете просматривать DateBase Desktop'ом,
то файлы *.cds он <не берет>. Для этого рекомендую написать простейшую
программу.
Создайте новый проект и посадите на форму все компоненты из предыдущего
примера, но не создавайте никаких полей, только свяжите их. Добавьте
диалоговый компонент OpenDialog1 для открытия файлов.
Создайте процедуру обработки события формы OnActivate и вставьте в нее
такой код:
procedure TForm1.FormActivate(Sender: TObject);
begin
if OpenDialog1.Execute then begin
ClientDataSet1.FileName:=OpenDialog1.FileName;
ClientDataSet1.Open;
end;
end;
| |
Вы получите универсальную программу для просмотра и редактирования любых
файлов *.cds. Если посидеть пару деньков, то можно написать полноценный
заменитель DateBase Desktop'а.
Надеюсь, что после этого вы раскроете учебник на главе "Распределенные
многозвенные приложения и технология DataSnap", дочитаете эту главу до
конца и узнаете много интересного.
P.S.
Недавно, я купил CD с городским телефонным справочником. База данных
сидит в нескольких DBF-файлах и при инсталляции происходит установка,
всеми любимого, BDE очень древней версии. Хорошо, что я чуть-чуть в этом
что-то понимаю и не установил его. А если бы программист, который творил
сей продукт, знал о существовании компонента ClientDataSet?
[TClientDataSet]
Обсуждение материала [ 17-04-2009 03:58 ] 42 сообщения |