Как записать nrec в DBF?

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Как записать nrec в DBF?

Сообщение Nikos »

Помогите разобраться!
Написал интерфейс выгрузки данных в DBF, среди полей есть nrec.
Создал поле как: DBFAddField(hDBFh, 'Store_ID', DbNum, 20, 0);
Потом записываю значение DBFPutFieldValue(hDBFh,'DocKind', Result.DocKind);
Но в итоговом DBF файле в данном поле последние 2 цифры заменены нулями. Что я делаю не так?
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Прошу прощения, записываю значения так:
DBFPutFieldValue(hDBFh,'Store_ID',String(KatPodr.nrec));
homak
Постоянный обитатель
Сообщения: 144
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Красноярский Край
Контактная информация:

Сообщение homak »

писал как строку вот так - все работает :)

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

  DBFaddField(handle,'CKLPRICE'     ,DbChar, 17,0); // Нрек прайс листа

....
....
....

DBFPutFieldValue(handle,  'CKLPRICE'     , String(TECHP.KLPRICE.nrec,0,0)     );  // Нрек прайс листа
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Спасибо.
У меня же и в задании указано: char(20), куда смотрел...
yuri_z
Постоянный обитатель
Сообщения: 165
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Н.Новгород ОАО "Сибур-Нефтехим"
Контактная информация:

Сообщение yuri_z »

function String (i : anyType;
length : byte;
digits : byte) : string;
В десятичный формат вывести нельзя, будет осуществлено неявное преобразование, которое испортит 2 последних знака.
digits : byte - количество знаков после запятой в результирующем выражении. Имеет смысл только для действительных чисел и для comp. Для comp это поле переключает систему счисления, в которой выводится результат. Если параметр равен 0 (или не задан), то получаем шестнадцатеричную систему счисления, иначе - десятичную.
Но это будет уже строка а не число.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Да, я так и сделал, только для comp достаточно просто указать string(i). Причем система счисления получается десятичная.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

а string(???,21,0) шестнатеричная :-)
Alpiton
Посетитель
Сообщения: 40
Зарегистрирован: 18 апр 2006, 09:19

Сообщение Alpiton »

Я делаю так :

DBFAddField(hnd , 'NREC' , DbNum , 24, 0) ;
DBFPutFieldValue(hnd, 'nrec', table1.nrec);

и всё работает.

Если дбф открыть в Екселе или Фокспро, последние 2 цифры обнулены. Но если посмотреть Фаром, то всё в порядке. Т.е. глючат Ексель с Фокспро.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

foxpro не поддерживает numeric больше чем 20 - по стандарту dbf не положенно больше. А галке все равно - она все равно как текст все поля пишет. Лучше все таки писать как string.
Ответить