-
Приветсвую знатоков. Выручайте: приходят телефонные переговоры в dbf-файлах. Созданы они в какой-то DOS программе (какой - не удается узнать). Проблема в том, что числа в ней проставлены с разделителем точка. Попробовал TDBF - вместо чисел нули. Просмотрел через утилиту в Total Comandere - есть нормальные числа. Через BDE - показывает целые числа (знаки после точкти отсекает) да и BDE использовать мне нельзя. Подскажите, как выкрутиться. Может есть какой компонент который справиться с этой задачей?
-
-
> Проблема в том, что числа в ней проставлены с разделителем точка.
это не проблема, это стандарт. даже последний виндовый VFOXPRO так пишет.
> Попробовал TDBF - вместо чисел нули.
значит не так пробовал (насколько знаю он со старыми dos dbf(и dBase и Foxpro) файлами нормально работает, хотя их самих несколько версий...), или причина не в этом.
> Подскажите, как выкрутиться.
не надо выкручиваться, надо нормально работать, проверить формат dbf-а, посмотреть тип полей, и использовать то, что подходит, и правильного типа.
-
Сергей М. ©. Извините за невежество. Какой программой лучше просмотреть структуру заголовка файла (эти 32 байта).
-
> ruslan_as (14.09.09 12:55) [3]
Да вот прямо той демо-программой, фигурирующей по приведенной ссылке, как раз и можно посмотреть)
-
Разобрался: простая таблица
Размер заголовка в байтах 97
Размер записи в байтах 19
По таблице остальное "0"
Поле SUMMA (у которого проблема):
тип Numeric
Размер поля 16
Что еще нужно, для того что бы определить тип?
-
>>Да вот прямо той демо-программой, фигурирующей по приведенной ссылке, как раз и можно посмотреть)
При компиляции выдает Что не может найти файл DBFHeader.res. Пришлось через WinHex.
-
> Поле SUMMA (у которого проблема):
> тип Numeric
> Размер поля 16
А чему, согласно наблюдаемому тобой заголовку этого поля, равно кол-во дробных разрядов ?
По идее оно д.б. равно 2, если речь в поле идет о рублях-копейках ..
-
> не может найти файл DBFHeader.res
Ты бы хоть сообщение до конца дочитал : там ведь тебя спрашивают, создать ли этот файл по причине его отсутствия)
-
Для Numeric требуется два поля precision и size
Кроме того никаких программ искать не надо, с Дельфи идет Database Desctop
-
>>Ты бы хоть сообщение до конца дочитал : там ведь тебя спрашивают, создать ли этот файл по причине его отсутствия)
В том то и дело, что не спрашивает. При запуске dpr пишет сообщение, что не может найти файл. А при компиляции выдает
[Fatal Error] DBFHeader.dpr(6): Unit Windows was compiled with a different version of Types.DWORD. Разбираться не стал.
>>А чему, согласно наблюдаемому тобой заголовку этого поля, равно кол-во дробных разрядов ?
Это я сообразил, что в базе не видно разрядов из-за этого. Только возникают вопросы, почему через другие программы (тот же DOS Navigator или F3 в Total Comander 7 - именно 7, а не ниже ) я вижу эти знаки, а через стандартные компоненты нет? Что тогда делать мне? Изменять в каждом пришедшем файле тип поля?
-
Допустим это N16.x тогда еще остается побеспокоиться насчет правильного формата, что не обязательно, особенно для самописного доступа.
-
-
Поставь в заголовке поля "SUMMA" в поле precision ("Дес.разряд") значение 4.
Что за идиот там поставил 0 и как он додумался до подсчета суммы с точностью до сотых долей копейки - ума не приложу)
-
> Разбираться не стал
Может оно и верно, но следовало бы разобраться, ибо те же грабли , вполне возможно, хлобыстнут позже.
Следовало просто везде, где в проекте встречается слово Types, заменить его на, например, _Types
-
>>Сергей М. Это программно реализуемо? Потому как это мне прийдется делать ежемесячно... Спасибо за то, что помогаете...
-
А ты уже попробовал [13] ?
И убедился что теперь все в порядке ?
Или какртина по-прежнему удручающая ?)
-
Судя по всему это самопальный формат или что ни будь особое. Поскольку DBD ругается на попытки просмотра структуры, как раз по поводу размера.
-
> Anatoly Podgoretsky © (14.09.09 14:32) [17]
Угу.
Либо свою прокладку к TDataSet писать либо править prec и size и в заголовке и в теле.
-
> Сергей М. (14.09.2009 14:47:18) [18]
Если все понятно с полями, то проще написать прямой доступ к файлу.
Там есть и другие проблемы, например C255 - когда для dBase/FoxPro максимум 254
Другие изначально символьные значения, но с цифрами, определены как N16.0