Difference between revisions of "Guide for usage of Tdbf component/ru"

From Free Pascal wiki
Jump to navigationJump to search
Line 49: Line 49:
  
 
При использовании данного компонента я выявил несколько багов.
 
При использовании данного компонента я выявил несколько багов.
-1. При попытке узнать тип и размерность поля не всегда полученный результат соответствует действительности.
+
 
-2. При упаковке таблицы с MEMO файл MEMO "раздувается" приблизительно в 10 раз вместо того, чтобы уменьшаться.
+
1. При попытке узнать тип и размерность поля не всегда полученный результат соответствует действительности.
-3. Нет нормальной поддержки перекодировки с кодовой страницы БД в текущую локаль и обратно, что создает определенные трудности при переносе БД с одной системы в другую (напр. из DOS в Windows или Linux), поэтому приходится самому реализовывать перекодировку "на лету".
+
 
 +
2. При упаковке таблицы с MEMO файл MEMO "раздувается" приблизительно в 10 раз вместо того, чтобы уменьшаться.
 +
 
 +
3. Нет нормальной поддержки перекодировки с кодовой страницы БД в текущую локаль и обратно, что создает определенные трудности при переносе БД с одной системы в другую (напр. из DOS в Windows или Linux), поэтому приходится самому реализовывать перекодировку "на лету".
  
  
 
--[[User:ViruZ|ViruZ_UA]] 14:55, 20 March 2008 (CET)
 
--[[User:ViruZ|ViruZ_UA]] 14:55, 20 March 2008 (CET)

Revision as of 14:42, 21 March 2008

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

Обзор

В этой статье я хочу описать некоторые особенности использования компонента Tdbf совместно со средой разработки Lazarus. При написании оиспользовались Free Pascal Compiler 2.2.1 /Lazarus 0.9.25, компонент Tdbf установлен по умолчанию. Примеры кода, приведенные ниже, проверены в Windows XP SP2 и Mandriva Linux 2007.1 Spring.

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

Я пользовался следующей документацией при изучении принципов работы с этим компонентом. Официальная документация в формате 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 с дробной частью.

Замеченные баги

При использовании данного компонента я выявил несколько багов.

1. При попытке узнать тип и размерность поля не всегда полученный результат соответствует действительности.

2. При упаковке таблицы с MEMO файл MEMO "раздувается" приблизительно в 10 раз вместо того, чтобы уменьшаться.

3. Нет нормальной поддержки перекодировки с кодовой страницы БД в текущую локаль и обратно, что создает определенные трудности при переносе БД с одной системы в другую (напр. из DOS в Windows или Linux), поэтому приходится самому реализовывать перекодировку "на лету".


--ViruZ_UA 14:55, 20 March 2008 (CET)