Форум: "Базы";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
ВнизКак обойти дел. на ноль в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.04 c