dbf_logoПриветствую читателей блога. Сегодняшняя статья будет посвящена работе с DBF-файлами, без использования ADO, BDE и компонентов доступа к данным. Я уже рассказывал про работу с DBF-файлами, это описано в этой статье.

Многим не нравится работа с ADO, BDE, так как для работы программы, которая была написана с использованием данной технологии, необходимо наличие установленных драйверов поставщика данных, BDE, dll-библиотеки и так далее.

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

Поначалу у меня были проблемы с использованием данного компонента, в частности с кодировками таблицами, но в итоге все разрешилось. Теперь он в моей коллекции, тем более является совершенно бесплатным. Скачать сам компонент можно по этой ссылке, там же есть и пример работы, а также инструкция с описанием методов, свойств компонента. Я Вам расскажу быстро самое основное, то есть, как открыть таблицу, как добавить данные или как создать новую DBF-таблицу.

Итак, компонент Вы можете установить, а я его просто подключаю в Uses, то есть, прописываю туда модуль DBF. Но Вы можете его инсталлировать, как положено и использовать как визуальный компонент.

Итак, я подключил модуль DBF в Uses и на форме разместил четыре кнопки, которые будут отвечать за:

  • Создание DBF-таблицы
  • Вставки записей в DBF-таблицу
  • Удаление записей из DBF-таблицы
  • Считывание записей из DBF-таблицы

Вот такая у меня получилась формочка:

1img

На форме у меня только кнопки, так необходим компонент TDBF, но я буду использовать данный компонент в режиме Run-Time. Начнем мы с создания DBF-файла. Таблица у нас будет самая простая, которая состоит из номера и какого-то текстового поля. Вот при помощи такого не сложного кода мы можем без проблем создать DBF-таблицу:

procedure TForm1.Button1Click(Sender: TObject);
var
  DBF1:TDBF;
begin
    DBF1:=TDBF.Create(Form1);
    DBF1.AddFieldDefs('TTN_SER',bfString,2,0);
    DBF1.AddFieldDefs('TTN_NO',bfNumber,7,0);
    DBF1.TableName:='D:\Test.DBF';
    DBF1.CreateTable;
    DBF1.CodePage:=ANSI;
    DBF1.Close;
    FreeAndNil(DBF1);
end;

Создаем саму таблицу, добавляем 2 поля с указанием типа и размерности, указываем ее имя (путь), кодовую страницу, закрываем и уничтожаем объект. Заходим по пути, где должна быть создана таблица, проверяем:

2img

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

Поэтому, код для вставки записей у меня вышел следующим:

procedure TForm1.Button2Click(Sender: TObject);
begin
    DBF1:=TDBF.Create(Form1);
    DBF1.TableName:='D:\Test.DBF';
    DBF1.Open;
    DBF1.CodePage:=ANSI;
    DBF1.Append;
    DBF1.SetFieldData(1,'ТН');
    DBF1.SetFieldData(2,'1721721');
    DBF1.Post;
    DBF1.Close;
    FreeAndNil(DBF1);
end;

Открываем DBF-файл и видим:

3img

Здесь самое главное – это сохранить правильную последовательность. То есть, сначала открывается таблица, только затем назначается ей кодовая страница, а не наоборот. Ну а дальше все очень просто, смысл работы, как и с обычными таблицами базы данных. Вставляется запись, присваивается значение нужному столбцу и затем сохраняется запись.

Переходим к удалению записей. Насколько Вам известно, в DBF-таблицах можно физически удалять записи, а можно помещать их просто на удаление. Так вот, мы рассмотрим эти два варианта. Запись помечается на удаление, если на ней установлен указатель. Вот таким вот кодом мы пометим на удаление все записи:

procedure TForm1.Button4Click(Sender: TObject);
var
 i:integer;
begin
    DBF1:=TDBF.Create(Form1);
    DBF1.TableName:='D:\Test.DBF';
    DBF1.Open;
    DBF1.CodePage:=ANSI;
    DBF1.First;
    for i:=0 to DBF1.RecordCount-1 do
     begin
      DBF1.Deleted:=True;
      DBF1.Next;
     end;
    DBF1.Post;
    DBF1.Close;
    FreeAndNil(DBF1);
end;

4img

Чтобы снять отметку удаление на запись, необходимо просто DBF1.Deleted:=True заменить на DBF1.Deleted:=False. Чтобы физически удалить записи, нужно упаковать таблицу, поэтому того, как отметки были проставлены, необходимо дописать DBF1.PackTable.

Теперь нам осталось рассмотреть только считывание данных с DBF-таблицы. Для этого можно воспользоваться следующим кодом:

procedure TForm1.Button3Click(Sender: TObject);
begin
    DBF1:=TDBF.Create(Form1);
    DBF1.TableName:='D:\Test.DBF';
    DBF1.Open;
    DBF1.CodePage:=OEM;
    DBF1.First;
    ShowMessage(DBF1.GetFieldData(1));
    DBF1.Post;
    DBF1.Close;
    FreeAndNil(DBF1);
end;

В GetFieldData необходимо передать номер столбца, данные которого Вы хотите считать.

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

Теперь Вы знаете, как можно работать с DBF-таблицами без использования BDE, ADO и других драйверов и поставщиков данных.

Метки: , , ,




К записи “Работа с DBF-таблицами без использования BDE и ADO” оставлено комментариев: 3.

  1. Думаю, лучше дать ссылку на сайт самого компонента:

    http://tdbf.sourceforge.net/

    Хоть новость и датирована 2007 годом… Обсуждения ведутся в рассылке, а исходники правятся под последние версии Delphi.

  2. kylt_lichnosti:

    Я бы лучше с родной страницы качал.
    http://tdbf.sourceforge.net
    Когда на ХЕ2 переходили с 7, то оттуда брал — заработало насколько помню. Только у нас там были свои изменения, пришлось и их переносить. Руки бы отрывал, тем кто иходники компонент в проектах правит.

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

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*