xml_delphiВсем привет! Ну что, продолжаем рассматривать работу с файловыми базами данных в 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-файла, проект выглядит следующим образом:

file-bd-delphi_1

Метки: , , , ,




К записи “Работа с файловыми базами данных в Delphi. Часть 2” оставлено комментариев: 10.

  1. Alex W. Lulin:

    Ну не знаю… Что-то не «вкурил».

    • Andrey:

      Ну в прошлой статье мы рассмотрели, как формировать поля, для файловой БД, а в этой мы их сохраняем в файл, а также загружаем!!!

  2. Alex W. Lulin:

    Ну прошлая — статья — вполне. На мой вкус. А тут — ну как-то «кладём кнопки на форму»… Хотя кто бы говорил…

  3. Alex W. Lulin:

    Простите за резкость если что. Я сам — тот ещё «блоггер». О многом хочу рассказать, но не получается. Но я был бы рад и критическим комментария, но пока не получаю НИКАКИХ — то ли никто не читает, то ли никто не пишет. Так что — «радуйтесь критике» :-) Ну я бы — радовался бы… Я смотрю у вас вроде есть «писательская жилка». Нет интересна «объединить усилия»? Я бы например — рассказал бы вам — что я хочу рассказать, а вы бы — написали например. С взаимным интересом конечно же.

  4. Владимир:

    А как Вам такой вариант создание файловой базы на основе RECORD-записи и полной её обработке, со своим поиском и сортировкой(вспоминая Turbo Pascal,но в DELPHI 6/7). Я когда то пробовал. А Вам слабо? :)

    • Andrey:

      Нет, не слабо, я такое делал, даже делился на данном блоге, просто показал, что есть проще вариант!

  5. хуесас:

    че за хуйня ? как совместить edit-товские файлы с базой данных ?

  6. crecker:

    Здравствуйте.Почему на формат 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’
    В чём может быть причина?

Оставить комментарий на Владимир

Вы можете использовать следующие теги:

*