Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];

Вниз

Floating point invalid operation   Найти похожие ветки 

 
aleXXoft   (2001-12-13 14:32) [0]

Приветствую!

Прежде, чем задам вопрос, расскажу как всё было...

Есть серверок с базулькой. Сервер - Linux, базулька - Oracle. Пишу клиент для Выни на Дэльфи-5. Oracle Client использую версии 8.1.7.
Всё написал. Работает.

Решил провести "регламентные работы" (много хламу накопилось да и ваще) и проинсталил комп заново (всё тоже самое: от винды2000 до Дэльфи-5 с БДЕ 5.1.1).

Запускаю Дэльфи. Проект компилится, запускается, но... не работает!

Когда я анализирую данные (выполнив SQL-запрос) вылетает ошибка
"Floating Point Invalid Operation". Поля, которые принимают участие в анализе имеют тип INTEGER. Могуть быть NULL. При проверке на IsNull выдаётся FALSE, но при попытке получить значение (например, "i:=DS.FieldByName("counter_value").AsInteger") вылетает вышенаписанная ошибка. По идее, можно и не делать проверку на IsNull, т.к. у меня переменная i преобразуется затем в строку, а тут мы знаем, что если в поле находится NULL, то функция AsString вернёт пустую строку (для меня это не фатально), а если находится ноль, то и вернётся ноль (т.е. AsString="0").
В моём же случае, когда в поле находится NULL возвращается какое-то неимоверно большое (или, наоборот, маленькое) значение, которое ну никак не укладывается в INTEGER (причём оно "чем-то" очень "напоминает" значение с плавающей точкой и огромной степенью).

Так вот, что самое интресное, так это то, что ДО ЭТОГО всё работало! То есть при проверке на IsNull выходило TRUE! Что за хрень?

Кстати, на соседнем компе всё работает до сих пор (там установлен тот же самый софт!).

В принципе, я понимаю почему вылазит именно "Floating Point Invalid Operation". При выполнении функции AsInteger выполняется функция AsFloat, а затем происходит округление. Так вот при округлении полученного функцией AsFloat значения возникает исключение FPU "Invalid Operation". Я посмотрел, что возвращает функция AsFloat. Она возвращает то же, что возвращает функция AsString (только, естественно, не в строковом виде). То есть число с огромной степенью (меньшее/большее по модулю, чем 1e-18/1e18). То есть, собственно, возвращет тот самый NULL, на который должна была обратить внимание функция IsNull.

Так вот главный вопрос: ПОЧЕМУ ФУНКЦИЯ ISNULL НЕПРАВИЛЬНО РАБОТАЕТ?
Или в более общей форме: КАКОГО РОЖНА ВООБЩЕ ТАК ПРОИСХОДИТ?

%(

С приветом, aleXXoft
Успехов!


 
petr_v_a   (2001-12-13 15:20) [1]

ВЫкинь "БДЕ 5.1.1" на помойку. Понимаю, очень радикально, и, возможно, не от тебя зависит, но действенно...


 
aleXXoft   (2001-12-13 15:29) [2]

Это от этого? Ты уверен? На компах, где работает всё нормально стоит тоже 5.1.1

Причина в версии БДЕ? На разных компах БДЕ работает по-разному? Бред.

С приветом, aleXXoft
Успехов!


 
aleXXoft   (2001-12-13 15:57) [3]

a?


 
petr_v_a   (2001-12-13 16:14) [4]

ага :) независимо от версии


 
Mick   (2001-12-13 16:21) [5]

Поиграй с параметрами "ENABLE BCD" и "ENABLE INTEGERS"


 
Val   (2001-12-13 16:27) [6]

...ставил я себе NT посде 98, видел у себя подобную ошибку :), в "Язык и стандарты->Числа" ставится точка-разделитель вместо запятой и все..


 
aleXXoft   (2001-12-13 18:14) [7]

Спасибо всем, кто участвовал в этом разговоре, но всё оказалось почти так, как сказал petr_v_a. Вот. Снёс БДЕ 5.11 и поставил тот, что идёт вместе Д5 (5.01) Всё заработало! БДЕ 5.11 - ГЛЮК!!! Не ставьте его!

С приветом, aleXXoft
Успехов!


 
petr_v_a   (2001-12-13 19:29) [8]

В идеале при работе с Oracle лучше от BDE отказаться как таковой, если, конечно возможно



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.01.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.018 c
1-52556
saviola
2001-12-28 14:51
2002.01.17
Работа с компонентами страницы Dialogs


1-52530
навичек
2001-12-27 07:41
2002.01.17
Дурацкая пошаговая отладка :(


3-52510
dron1
2001-12-15 18:38
2002.01.17
master/detail


6-52627
KLM
2001-09-28 10:11
2002.01.17
Кодировка почты


1-52599
greenrul
2001-12-29 14:42
2002.01.17
Почему random(4) всегда возвращает 0???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский