Создание полей TDBF

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Создание полей TDBF

Сообщение ViruZ »

Работаю с компонентом TDBF (Lazarus 0.9.22).
В режиме Runtime создается таблица с несколькими полями. При создании целочисельных и строковых полей проблем нет, а как создать поле формата NUMERIC 5.2? В документации такого описания я не нашел.
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

Неужели никто не знает?
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

DataType := ftFloat;
Size := 5;
Precision := 2;
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

TarifDbf.FieldDefs.Add('OKLAD1',ftFloat,5,2); - выдает ошибку
udata.pas(90,48) Error: Incompatible type for arg no. 4: Got "ShortInt", expected "Boolean"
haword
постоялец
Сообщения: 301
Зарегистрирован: 02.03.2006 10:34:40

Сообщение haword »

ViruZ писал(а):TarifDbf.FieldDefs.Add('OKLAD1',ftFloat,5,2); - выдает ошибку
udata.pas(90,48) Error: Incompatible type for arg no. 4: Got "ShortInt", expected "Boolean"


Creates a new field definition object and adds it to the Items property.
Delphi syntax:
procedure Add(const Name: String; DataType: TFieldType; Size: Integer = 0; Required: Boolean = False);
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

v-t-l писал(а):DataType := ftFloat;
Size := 5;
Precision := 2;


не работает - выдает ошибку.
v-t-l
энтузиаст
Сообщения: 744
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

Попробуй указать Precision после того, как добавишь поле.

Код: Выделить всё

TarifDbf.FieldDefs.Add('OKLAD1',ftFloat,5);
TarifDbf.FieldDefs[TarifDbf.FieldDefs.Count-1].Precision := 2;
ViruZ
постоялец
Сообщения: 175
Зарегистрирован: 30.05.2005 17:41:12
Откуда: Украина
Контактная информация:

Сообщение ViruZ »

Большое спасибо! Все работает!!!
Aleh
новенький
Сообщения: 53
Зарегистрирован: 08.08.2016 11:27:45

Сообщение Aleh »

У меня возник такой вопрос как добавить поле в существую таблицу?
с созданием с нуля проблем нет. Например есть таблица с заполненными полями
1 OBJECTID Numeric 9
2 ADDRESS Character 200
3 NUM Numeric 9
4 SUBJ Character 254
Надо добавить
5 LOTNOTE Character 200
6 DOCAREA Float 13.11
7 DELTAREA Float 13.11
8 BORDERTYPE Numeric 4
9 USERN_1 Numeric 9
wavebvg
постоялец
Сообщения: 355
Зарегистрирован: 28.02.2008 03:57:35

Сообщение wavebvg »

Исходя из структуры хранения данных в dbf можно предположить, что лучшим способом будет:

1. Создать пустую таблицу во временном файле с обновленной структурой
2. Скопировать все данные
3. Переименовать файлы
Aleh
новенький
Сообщения: 53
Зарегистрирован: 08.08.2016 11:27:45

Сообщение Aleh »

... для таблицы с 54 полями и одной записью (иногда 2-10) не будет.
Lucifer
постоялец
Сообщения: 133
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Сообщение Lucifer »

Присвоить дефолтные значения?
Aleh
новенький
Сообщения: 53
Зарегистрирован: 08.08.2016 11:27:45

Сообщение Aleh »

Хорошо. Но только теоретически. (На практике я сделать не смог)
Ответить