Guide for usage of Tdbf component/ru

From Free Pascal wiki
Jump to navigationJump to search

Учебник по использованию компонента Tdbf

Обзор

Этот учебник описывает особенности использования компонента Tdbf совместно со средой разработки Lazarus.

Что нам понадобится

Этот документ был написан с версией Free Pascal Compiler 2.2.1 /Lazarus 0.9.25, компонент Tdbf установлен по умолчанию.

Другая документация

Существует также другая документация по работе с этим компонентом. Официальная документация в формате PDF доступна на SourceForge. Также мой перевод статьи по использованию этого компонента [1].

Начало - создание новой таблицы

Подробности создания таблицы описываются в статье [[2]] Я хочу уточнить некоторые особенности, с которыми мне пришлось столкнуться. Например, нам необходимо создать таблицу следующей структуры, если она не существует (пример взят из реальной программы):

procedure CheckAndCreate;
var path : String;
    TarifDbf : Tdbf;
begin
 path:=ExtractFilePath(Application.EXEName);
 //Проверка существования базы данных
 if not DirectoryExists(Path+DirectorySeparator+'Base') then 
        CreateDir(Path+DirectorySeparator+'Base');
  if not FileExists(Path+'Base'+DirectorySeparator+'tarif.dbf') then begin
   TarifDbf.TableLevel := 4;
   TarifDbf.FilePathFull := Path+'Base';
   TarifDbf.TableName := 'tarif.dbf';
   TarifDbf.FieldDefs.Add('NLZ',ftInteger,2);//[0]код учреждения
   TarifDbf.FieldDefs.Add('NOTD',ftInteger,2);//[1]код отдела
   TarifDbf.FieldDefs.Add('DOLGNOST',ftString,20);//[2]название должности
   TarifDbf.FieldDefs.Add('PERSONAL',ftInteger,2);//тип персонала
   TarifDbf.FieldDefs.Add('KODKAT',ftInteger,2);//[3]квалификацоонная категория (разряд)
   TarifDbf.FieldDefs.Add('FIO1',ftString,35);//[4]Фамилия, имя, отчество сотрудника
   TarifDbf.FieldDefs.Add('TARIFRZ',ftInteger,2);//[5]Тарификационный разряд (1..25)
   TarifDbf.FieldDefs.Add('OKLAD1',ftFloat,10);//[6]Должносной оклад по тарифному разряду
   TarifDbf.FieldDefs[TarifDbf.FieldDefs.Count-1].Precision := 2;//<=
   TarifDbf.FieldDefs.Add('DOLJA1',ftFloat,5);//[16]доля ставки
   TarifDbf.FieldDefs[TarifDbf.FieldDefs.Count-1].Precision := 2;//<=
   TarifDbf.FieldDefs.Add('FOND',ftFloat,11);//[27] месячный фонд з/п
   TarifDbf.FieldDefs[TarifDbf.FieldDefs.Count-1].Precision := 2;//<=
   TarifDbf.CreateTable;
  end;
  TarifDbf.FilePathFull := Path+DirectorySeparator+'Base';
  TarifDbf.TableName := 'tarif.dbf';
  TarifDbf.Active := true;
end;

Обратите внимание на фрагменты кода, отмеченные <= в коментарии - только таким образом можно создать поле типа Numeric с дробной частью.