Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6306
Последний выпуск: 19.06.2015

Создание dbf файла (dBASE IV) при помощи TDBF

47K
21 июля 2011 года
Cka3o4HuK
31 / / 21.10.2009
Версия TDBF 6.9.1
 
Код:
dbf.TableName:='table.dbf';
  dbf.TableLevel:=4;

  dbf.FieldDefs.Add('item1', ftString, 10, true);
  dbf.FieldDefs.Add('item2', ftInteger, 5, true);
  dbf.FieldDefs.Add('item3', ftFloat, 10, true);
  dbf.FieldDefs[dbf.FieldDefs.Count-1].Precision:=2;

  dbf.CreateTable;


В рантайме при создании целочисленного поля получаю EDatabaseError "Invalid field size" , тоже самое получаю при создании вещественного поля.

Если написать так:
 
Код:
dbf.FieldDefs.Add('item2', ftInteger);
  dbf.FieldDefs.Add('item3', ftFloat);
  dbf.FieldDefs[dbf.FieldDefs.Count-1].Precision:=2;

то dbf будет создан с целочисленным полем размером 9 и вещественным формата 18.8

Как получить необходимую мне размерность?
10
21 июля 2011 года
Freeman
3.2K / / 06.03.2004
Что-то у меня большие сомнения, что dbf, даже от dBASE IV, поддерживает такие форматы. Тогда это не ошибка TDbf, а ограничение самого формата. 10-значное целое число уже переходит границу 32-битного целого. Аналогично с вещественным. Не было таких размерностей в DOS.
416
21 июля 2011 года
MaitreDesir
380 / / 02.01.2008
Freeman все правильно сказал. Не было там размерностей для интов, выходящих за 32 бита, то есть числа более 4294967296 не могут там хранится в таком формате. Получается что максимум - 9-значное целое (закодировать 9999999999 мы уже не сможем). Так что либо отказывайтесь от dbf, либо - придумывайте, как изгольнуться.
47K
22 июля 2011 года
Cka3o4HuK
31 / / 21.10.2009
Если не указывать размер для вещественного числа, то он создает вещественное поле размеров 18.8! Тогда почему должны быть проблемы с 10.2 ? А вообще решение нашлось немного внезапно.
Код:
var fieldDefs:TDbfFieldDefs;
begin
  dbf.TableName:='table.dbf';
  dbf.TableLevel:=4;

  fieldDefs:=TDbfFieldDefs.Create(dbf);

  fieldDefs.Add('item1', ftString, 10, true);
  fieldDefs.Add('item2', ftInteger, 5, true);
  fieldDefs.Add('item3', ftFloat, 10, true);
  fieldDefs.Items[fieldDefs.Count-1].Precision:=2;

  dbf.CreateTableEx(fieldDefs);

  fieldDefs.Destroy;
end.


Работает на ура

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог