Всем привет! Ну что, продолжаем рассматривать работу с файловыми базами данных в Delphi. Мы закончили прошлую статью на том, что мы сохранили нашу БД в XML-формат. Но не стоит забывать о том, что сохранять структуру таблицы, а также ее содержимое можно не только в файл, но и в поток памяти.
Как я говорил в прошлой статье, мы можем сохранить в файл с помощью контекстного меню, нажав по компоненту TClientDataSet правой кнопкой мыши. Но лучше воспользоваться методом, для сохранения в файл:
Procedure SaveToFile(const FileName:string; Format:TDataPacketFormat);
Либо же методом для сохранения в поток памяти:
Procedure SaveToStream(Stream:TStream; Format:TDataPacketFormat);
Первый параметр предполагает имя файла или поток, в которой будет сохранена структура таблицы, а также сами данные, а второй параметр в методах определяет формат сохраняемых данных, который может принимать следующие значения:
Значение параметра | Описание | Расширение файла |
dfBinary | Бинарный формат данных | *.cds |
dfXML | XML формат | *.xml |
dfXMLUTF8 | Также XML формат, только текст сохраняется в кодировке UTF-8 | *.xml |
Так, с методами сохранения таблиц мы разобрались, теперь давайте же рассмотрим методы, которые позволяют нам загрузить таблицу сразу из файла, либо же из потока памяти:
Procedure LoadFromFile(const FileName:string);
Выше метод для загрузки из файла, а что касается метода для загрузки из потока памяти, то он выглядит следующим образом:
Procedure LoadFromStream(Stream:TStream);
Ну что, теперь давайте попробуй сохранить структуру таблицы в файл. Пока что только структуру таблицы, так как мы ее не заполняли никакими данными. Итак, давайте для начала создадим не большой проект и поместим на форму следующие компонента:
- TButton
- TClientDataSet – на вкладке Data Access
- TSaveDialog
Поэтому, на событие кнопки Onclick мы напишем примерно следующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if SaveDialog1.Execute then
ClientDataSet1.SaveToFile(SaveDialog1.FileName,dfXML);
end;
Давайте дополним наш проект следующими компонентами:
- TDataSource – расположен на вкладку Data Access
- TOpenDialog
- TButton
- TDBGRid
Давайте разбираться немного. Компонент TDataSource нам необходим, как источник данных. Компонент TOpenDialog нам необходим для того чтобы загружать в наш проект файловую базу данных. Компонент TButton понятно для чего – для загрузки, по нажатию на кнопку мы будем загружать файл в проект, ну и компонент TDBGRid нам необходим для отображения данных нашей файловой БД. Но так как данных у нас пока нет, будут отображаться просто поля.
Для начала нам необходимо связать компоненты. Поэтому, выделяем компонент TDataSource и в свойстве DataSet выбираем компонент TClientDataSet. Далее выделяем компонент TDBGrid и в свойстве DataSource, выбираем наш компонент TDataSource.
Почти все, нам теперь необходимо загрузить наш XML-файл в проект. Для этого на событие OnClick нашей кнопки пишем следующий код:
procedure TForm1.Button2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
ClientDataSet1.LoadFromFile(OpenDialog1.FileName);
ClientDataSet1.Active:=True;
end;
В самом конце мы активируем наш набор данных, и он должен отобразиться в компоненте TDBGRid. У меня отобразились только лишь название полей, так как данных у меня нет. Вы же можете немного поэкспериментировать с сегодняшней статьей, ну а в следующей статье мы рассмотрим необходимую структуру XML-файла, чтобы он корректно отображался в нашем проекте, а также рассмотрим то, как можно добавлять, редактировать, удалять данные из файловой базы данных.
У меня после загрузки XML-файла, проект выглядит следующим образом:
Похожие записи
Метки: ClientDataSet, TClientDataSet, базы данных, БД, файловая БД
Ну не знаю… Что-то не «вкурил».
Ну в прошлой статье мы рассмотрели, как формировать поля, для файловой БД, а в этой мы их сохраняем в файл, а также загружаем!!!
Ну прошлая — статья — вполне. На мой вкус. А тут — ну как-то «кладём кнопки на форму»… Хотя кто бы говорил…
Как умею! Извиняйте!
Простите за резкость если что. Я сам — тот ещё «блоггер». О многом хочу рассказать, но не получается. Но я был бы рад и критическим комментария, но пока не получаю НИКАКИХ — то ли никто не читает, то ли никто не пишет. Так что — «радуйтесь критике» Ну я бы — радовался бы… Я смотрю у вас вроде есть «писательская жилка». Нет интересна «объединить усилия»? Я бы например — рассказал бы вам — что я хочу рассказать, а вы бы — написали например. С взаимным интересом конечно же.
Да ничего страшного! Интерес у меня всего есть, так что буду только рад!
А как Вам такой вариант создание файловой базы на основе RECORD-записи и полной её обработке, со своим поиском и сортировкой(вспоминая Turbo Pascal,но в DELPHI 6/7). Я когда то пробовал. А Вам слабо?
Нет, не слабо, я такое делал, даже делился на данном блоге, просто показал, что есть проще вариант!
че за хуйня ? как совместить edit-товские файлы с базой данных ?
Здравствуйте.Почему на формат dfxml Дэльфи ругается?
procedure TForm1.Button3Click(Sender: TObject);
begin
if datamodule3.savedialog1.execute then
datamodule3.ClientDataSet1.SaveToFile(datamodule3.SaveDialog1.filename,dfxml);
end;
Ошибка
[Error] Unit1.pas(335): Undeclared identifier: ‘dfxml’
В чём может быть причина?