Главная страница
    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
Успехов!



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

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

Наверх





Память: 0.45 MB
Время: 0.004 c
6-52626
iPasha
2001-10-24 18:10
2002.01.17
И снова про FTP и Proxy


7-52676
REL
2001-10-02 19:43
2002.01.17
Com порт


3-52477
Макс
2001-12-14 13:32
2002.01.17
Фильтрация в ADOTable


7-52670
Дядька Форгер
2001-09-27 08:13
2002.01.17
Вовместимость


1-52602
ЗЛОБНЫЙ КАРЛИК
2001-12-27 13:11
2002.01.17
String-TStrings. String-PChar. PChar-TStrings!!!! HEEEEELP!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский