Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Как обойти дел. на ноль в JetSQL   Найти похожие ветки 

 
Victor! ©   (2004-11-04 10:58) [0]

Использую ADOQuery и JetSQL (таблицы в Paradox). Такая проблема: в SQL используются расчеты, т.е. в полях запроса должны вычисляться формулы. В некоторых случаях происходит деление на ноль, и DBGrid ничем не заполняется, выдается сообщение "... E_FAIL". Можно ли сделать так, чтобы DBGrid все-таки заполнялся, но в тех местах, где происходит дел. на ноль просто выводилось "дел. на ноль", т.е. как заставить JetSQL продолжать выполнять запрос, даже если возникает дел. на ноль, и подставлять в этом случае "NULL"


 
Johnmen ©   (2004-11-04 11:02) [1]

А где сам текст запроса ?


 
sniknik ©   (2004-11-04 11:40) [2]

iif(x=0, "дел. на ноль", y/x)


 
Victor! ©   (2004-11-04 14:27) [3]

Запрос может быть такого рода: (f1*f2 + f3/f4)/(f5*f6+(f7/f8))  т.е. все что угодно (f1..f8 поля таблицы), арифметическое выражение составляет пользователь (подобно созданию запросов в Access), поэтому проанализировать кождое частное в формуле не представляется возможным.


 
Victor! ©   (2004-11-04 17:20) [4]

Попробывал в Accesse, получил:
(правилн. значение)
(правилн. значение)
Ошибка
(правилн. значение)
В JETe сразу "Деление на ноль" и икакой больше инфы.

Может есть какая-нибудь альтернатива JETу, желательно как в Accesse (хотя говорили что JET и Access это одно и тоже, одни и теже запросы они выполняют по-разному)


 
sniknik ©   (2004-11-04 17:48) [5]

> Попробывал в Accesse, получил:
> (правилн. значение)
> (правилн. значение)
> Ошибка
> (правилн. значение)
серверный курсор используют


 
Victor! ©   (2004-11-05 10:30) [6]

А мне то чего делать, как мне с JET, этот самый курсор использовать


 
sniknik ©   (2004-11-05 12:03) [7]

поставь у компанента ADODataSet.CursorLocatoin = clUseServer


 
Victor! ©   (2004-11-05 16:54) [8]

Перенос курсора на сервер очень помог, теперь найдя Null, можно писать "Ошибка".
Но есть другая беда. Если и использовать агрегативные функции (типа Avg(1/F1), где F1 иногда м/б 0)  то возникает ошибка, сообщение "Деление на ноль", причем это уже конкретно в JETe, потому как в Access возникает аналогичное сообщение, в DBGrid вообще ничего не появляется.
Но мне жизненно необходимо, чтобы если даже возникало дел. на ноль, писалось "Ошибка" в той ячейке где она возникает. Простой пример: есть база данных - часовые накопления показаний прибора. Энергетику надо посмотретьза месяц инфу по дням (т.е. группировка по часам а затем Sum или Avg).
Допустим в какой-то несчастный час, прибор сбоил и записал 0. И вот из-за одного показания, расчет какой либо формулы в которой нужно деление на это параметр, за целый месяц херится, вместо того, чтобы вывести например
..
25|знач
26|Ошибка
27|знач
Как быть, может есть другие драйвера баз данных, или другая возможность(хранимые пр-ры, или там не знаю). Потому что переводить все формулы создаваемые пользователем, в постфиксную форму и самому вычислять, ой как не хочется.


 
Victor! ©   (2004-11-08 11:10) [9]

Че? Никто не знает?


 
sniknik ©   (2004-11-08 11:15) [10]

> Че? Никто не знает?
в смысле?
оно всетаки помогло или нет? по описанию "другая беда" то же самое что и было до этого (для которого уже "Перенос курсора на сервер очень помог..." есть решение)


 
Victor! ©   (2004-11-08 17:52) [11]

Я повторюсь: " Если и использовать агрегативные функции (типа Avg(1/F1), где F1 иногда м/б 0)  то возникает ошибка, сообщение "Деление на ноль" " - т.е. в случае, когда формула обрабатывает просто данные таблицы, то возвращается NULL, а только когда пытаешся их просуммировать или усреднить (Sum, Avg) возникает ошибка.


 
Victor! ©   (2004-11-10 12:46) [12]

Да, видно не судьба


 
sniknik ©   (2004-11-10 12:57) [13]

почему? посмотри то что у тебя не получается в аксесе, если там этот запрос получится то можно сделать, нет всегда можно самому просчитать (труднее конечно чем запрос, но возможно тем не менее).



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

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.037 c
14-1101020589
Sour
2004-11-21 10:03
2004.12.12
SMTP и POP3 серверы


1-1101725416
Gloomer
2004-11-29 13:50
2004.12.12
Компонент выбора папки


1-1101298848
Amadey
2004-11-24 15:20
2004.12.12
Проблема с формой в DLL


14-1101113185
Гость
2004-11-22 11:46
2004.12.12
компания "Информконтакт"


4-1099076434
Redhopter
2004-10-29 23:00
2004.12.12
О перехвате сообщений