Difference between revisions of "Guide for usage of Tdbf component/ru"
Line 51: | Line 51: | ||
1. При попытке узнать тип и размерность поля не всегда полученный результат соответствует действительности. | 1. При попытке узнать тип и размерность поля не всегда полученный результат соответствует действительности. | ||
2. При упаковке таблицы с MEMO файл MEMO "раздувается" приблизительно в 10 раз вместо того, чтобы уменьшаться. | 2. При упаковке таблицы с MEMO файл MEMO "раздувается" приблизительно в 10 раз вместо того, чтобы уменьшаться. | ||
+ | --[[User:ViruZ|ViruZ_UA]] 14:55, 20 March 2008 (CET) |
Revision as of 15:55, 20 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 раз вместо того, чтобы уменьшаться. --ViruZ_UA 14:55, 20 March 2008 (CET)