Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Тробла с числом в таблице  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
Прислали мне таблицу
Числовые поля N(20,10)
В таблице вижу число 0,52
В дебагере показывает 0.0000000000

С чем это связано???
И как это обойти...
27 окт 04, 17:42    [1066050]     Ответить | Цитировать Сообщить модератору
 Re: Тробла с числом в таблице  [new]
leaf
Member [заблокирован]

Откуда: Ростов-на-Дону --> Москва
Сообщений: 2661
подробности подробности ватсон
27 окт 04, 17:57    [1066124]     Ответить | Цитировать Сообщить модератору
 Re: Тробла с числом в таблице  [new]
IgorProgrammer
Member

Откуда:
Сообщений: 687
Прислали наш архив где есть таблица с числовыми полями
pole1 N(20,10), pole2 N(20,10), pole3 N(20,10)

при просмотре(browse) этой таблицы все числа нормальные...
При любой манипуляции с числом или получении фокуса ячейки обрезается дробная часть...
если число было 0,52 то
при получении фокуса оно становится 0,0000000000
при фокуса потере опять 0,52

Что пользователь мог сделать с таблицей???
27 окт 04, 18:06    [1066157]     Ответить | Цитировать Сообщить модератору
 Re: Тробла с числом в таблице  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Если пользователь формировал таблицу через ODBC драйвер и в настройках DSN у него стоит "птичка" в пункте

"Use regional settings when outputting currency, numbers, dates, and times"

То ты и получишь описанный эффект.

Проблема здесь в том, что поля типа Numeric в FoxPro физически храняться как символьные данные. Это значит, что в принципе, в такое поле можно записать любой символ. Вот ODBC и записал символ запятой в соответствии с региональной настройкой.

Но при чтении данных для FoxPro символ запятой - это не есть символ, относящийся к числовым данным (символом-разделителем целой и дробной части непосредственно в таблице является точка). Следовательно, будут прочитаны как число только те символы, которые стоят ДО символа запятой. А это 0. Вот ты 0 и видишь в отладчике.

В принципе, можно все исправить ручками (видно же значение, надо просто в BROWSE-окне еще раз его написать), но проще попросить пользователя изменить настройки DSN и заново создать табличку.
27 окт 04, 18:21    [1066220]     Ответить | Цитировать Сообщить модератору
 Re: Тробла с числом в таблице  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi ВладимирМ!

Всё хорошо и правильно, только зачем же ручки то напрягать :) Всё можно
сделать и программно - способов масса - начиная от чтения файла по FREAD и
записи по FWRITE и заканчивая "массовой" переконвертацией по
FILETOSTR+CHRCONV+STRTOFILE (исключая область заголовка конечно) - последнее
годится когда таких полей много, а "просто текстовых" полей нету, или там не
существенно будет заменена запятая на точку или нет :)

Posted via ActualForum NNTP Server 1.1

28 окт 04, 01:02    [1066696]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить