Страница 1 из 1

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

Добавлено: 08 фев 2007, 13:56
Nikos
Помогите разобраться!
Написал интерфейс выгрузки данных в DBF, среди полей есть nrec.
Создал поле как: DBFAddField(hDBFh, 'Store_ID', DbNum, 20, 0);
Потом записываю значение DBFPutFieldValue(hDBFh,'DocKind', Result.DocKind);
Но в итоговом DBF файле в данном поле последние 2 цифры заменены нулями. Что я делаю не так?

Добавлено: 08 фев 2007, 13:58
Nikos
Прошу прощения, записываю значения так:
DBFPutFieldValue(hDBFh,'Store_ID',String(KatPodr.nrec));

Добавлено: 08 фев 2007, 14:00
homak
писал как строку вот так - все работает :)

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

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

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

DBFPutFieldValue(handle,  'CKLPRICE'     , String(TECHP.KLPRICE.nrec,0,0)     );  // Нрек прайс листа

Добавлено: 08 фев 2007, 14:03
Nikos
Спасибо.
У меня же и в задании указано: char(20), куда смотрел...

Добавлено: 26 фев 2007, 19:19
yuri_z
function String (i : anyType;
length : byte;
digits : byte) : string;
В десятичный формат вывести нельзя, будет осуществлено неявное преобразование, которое испортит 2 последних знака.
digits : byte - количество знаков после запятой в результирующем выражении. Имеет смысл только для действительных чисел и для comp. Для comp это поле переключает систему счисления, в которой выводится результат. Если параметр равен 0 (или не задан), то получаем шестнадцатеричную систему счисления, иначе - десятичную.
Но это будет уже строка а не число.

Добавлено: 27 фев 2007, 08:03
Nikos
Да, я так и сделал, только для comp достаточно просто указать string(i). Причем система счисления получается десятичная.

Добавлено: 27 фев 2007, 09:59
edward_K
а string(???,21,0) шестнатеричная :-)

Добавлено: 28 фев 2007, 09:27
Alpiton
Я делаю так :

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

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

Если дбф открыть в Екселе или Фокспро, последние 2 цифры обнулены. Но если посмотреть Фаром, то всё в порядке. Т.е. глючат Ексель с Фокспро.

Добавлено: 28 фев 2007, 10:09
edward_K
foxpro не поддерживает numeric больше чем 20 - по стандарту dbf не положенно больше. А галке все равно - она все равно как текст все поля пишет. Лучше все таки писать как string.