Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Исключение


Страницы:   1 2

zsnark ©   (2002-11-05 17:59:00) 

В приложении выполняется SQL-запрос к таблице Paradox, содержащей поля типа Number. На четырех из шести машин запрос выполняется и результирующая выборка достигается. На двух остальных при попытке в первый раз выполнить этот запрос вываливается исключение "Floating point overflow". При повторной попытке выполнения запроса с теми же параметрами выборка приходит успешно. Меняем параметры запроса и снова при его первом выполнении появляется данное исключение.
Я первым делом начал грешить на железо (у тех машин, на которых наблюдается глюк, примерно одинаковая конфигурация, отличающаяся от машин, на которых все в порядке)

Буду признателен за каждый ваш ответ.


ShuraGrp   (2002-11-13 10:28:00) [1]

А нет ли у тебя значения в полях = Null. В D6 up2 Null значения необходимо контролировать самому. Похоже, что во второй раз у тебя как раз поля уже имеют конкретные значения, поэтому и не ругаются.


Андрей Прокофьев   (2002-11-11 16:14:00) [2]

2 MsGuns © (11.11.02 16:11)
"Есть много в Windows, друг Горацио,
Что и не снилось мастакам",


MsGuns   (2002-11-11 16:11:00) [3]

>exit (11.11.02 15:07)

Не помню кто именно сказал у Шекспира:

"Есть много в мире, друг Горацио,
Что и не снилось нашим мудрецам",

но он явно имел в виду и BDE ;))))


exit   (2002-11-11 15:07:00) [4]


> Настраивать типы в период run-time?

Зачем же в run-time? Не нужно перегибать палки.

> Но как же все-таки при повторном вызове запроса он выдает
> результат? Даже если происходит некоторая путаница с типами
> полей и параметров? Как ЭТО можно объяснить?

Это к тем, кто писал BDE скорее всего вопрос.


zsnark   (2002-11-11 14:54:00) [5]

>ShuraGrp (11.11.02 14:21)
Каким образом пересоздать? В Design Time?

>exit (11.11.02 14:47)
Настраивать типы в период run-time?

Но как же все-таки при повторном вызове запроса он выдает результат? Даже если происходит некоторая путаница с типами полей и параметров? Как ЭТО можно объяснить?


zsnark   (2002-11-11 14:47:00) [6]

В приложении именно подобным образом и сделано: вначале запрос выборка выбрасывается в форму с Grid"ом, а затем уже по отдельной кнопке распечатывается отчет. И исключение появляется еще до первого использования распечатки.


exit   (2002-11-11 14:26:00) [7]

А еще настроить для Query типы Params


ShuraGrp   (2002-11-11 14:21:00) [8]

Попробуй пересоздать поля Query.


Max Zyuzin   (2002-11-11 14:18:00) [9]

>zsnark © (11.11.02 14:07)
А если все это дело в простой грид выводить сначала... сразу в отчет не лепить? Может грабли в отчете...?


zsnark   (2002-11-11 14:07:00) [10]

> Max Zyuzin (11.11.02 13:08)
К сожалению, фильтровать в самом запросе невозможно всвязи с логикой желаемых результатов запроса (фильтровать требуется по общей сумме, а не по каждой из суммируемых разностей (которые могут быть и положительные, и отрицательные, и нулевые)).
Для печатного отчета вначале вызывается метод Preview, который выводит на экран белый лист и сообщение "Invalid floating point operation".

>MsGuns (11.11.02 13:18)
Я обязательно опробую динамическое формирование строки запроса (все осложняется тем, что на машине, где я сам отлаживаю проект, все работает нормально, и среду надо устанавливать на машине клиента-бухгалтера, который весь день занимает машину; только в конце рабочего дня появляется возможность). Насколько это преобразование будет успешным я сообщу отдельно.

>ShuraGrp (11.11.02 13:41)
Типы значений параметров Integer, а также тип входного параметра в проекте указаны.


ShuraGrp   (2002-11-11 13:41:00) [11]

Надо определить тип параметров (Integer, input) в разделе параметры


MsGuns   (2002-11-11 13:18:00) [12]

А нельзя вместо параметров использовать динамическое формирование запроса
qu.Close;
qu.SQL.Clear;
qu.SQL.Add("SELECT...
qu.SQL.Add(" FROM...
...
qu.Prepare;
qu.Open;

Что-то мне подсказывает, что CAST не прокатывает именно из-за пераметров..


Max Zyuzin   (2002-11-11 13:08:00) [13]

А почему бы сразу в запросе не отбирать ненужные записи? Кстати по поводу отчета - вы сначала визуально просматриваете это или сразу в отчет пакуете?


zsnark   (2002-11-11 12:59:00) [14]

Полe S.PPID имеет тип Short (значения, хранящиеся там значения от 1 до 4), поле C.MID - Long Integer.

Настройки разделителя Decimal Separator просматривал через BDE Administrator (настройки совпадали с настройками на машинах с работающей программой). Но в замечании о разделителе остается неясным момент, когда в момент подобного сбоя при повторном открытии запроса выборка возвращается, хотя между этими двумя попытками никаких изменений в настройках Decimal Separator не производится, но печатный отчет по прежнему не формируется, выдавая подобный же сбой.

Вообще-то, после открытия запроса происходит фильтрация
по полю sum(C.Nach - C.Oplach) as Dolg с условием Dolg>0, которое задается во время проектирования, а не в коде.

Как вы думаете, может ли данное условие фильтра вызывать это исключение?


exit   (2002-11-11 10:28:00) [15]

Во-первых при том, что нужно смотреть на описание ошибки,
во-вторых при том, что поле типа Number способно хранить числа с плавающей точкой и если в нем хранится число 3.14, а в операционке дробные числа форматируются #,## - будет ошибка.


Max Zyuzin   (2002-11-11 10:23:00) [16]

>exit (11.11.02 09:44)
А какое отношение DecimalSeparator имеет отношение здесь? Здесь на сколько я вижу нет попыток произвести преобразование из строк в float. (только целые)


exit   (2002-11-11 09:44:00) [17]

Как много слов и ни одного по делу. Проблема с System Locale. В английской версии опер. систем Decimal Separator - обычно " . ", а в русских - " , ". Самый простой, но не самый красивый путь - при запуске приложения объявлять
DecimalSeparator := ",";
или
DecimalSeparator := ".";
по желанию.


Max Zyuzin   (2002-11-11 08:29:00) [18]

>zsnark © (10.11.02 20:11)
На самом деле лучше оставить так как есть AsInteger;
Тогда давайте попробуем так - а какой тип имеют поля S.PPID и C.MID?


zsnark   (2002-11-10 20:11:00) [19]

Присвоение параметра идет следующим образом:
Query.ParamByName("Edge1").AsInteger=(StrToInt(Edit3.Text)+StrToInt(Edit4.Text))*100+ m;

Примерные значения.
Edit3.Text = "2001"
Edit4.Text = "2002"
0<=m<=9

Может быть, вместо доступа к значению параметра через AsInteger
попробовать свойство Value?


Max Zyuzin   (2002-11-10 08:19:00) [20]

>zsnark © (06.11.02 17:48)
А как значение параметрам присваиваете?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо