![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обойти дел. на ноль в JetSQL [D6, Paradox]
Victor! © (2004-11-04 10:58:00)Использую ADOQuery и JetSQL (таблицы в Paradox). Такая проблема: в SQL используются расчеты, т.е. в полях запроса должны вычисляться формулы. В некоторых случаях происходит деление на ноль, и DBGrid ничем не заполняется, выдается сообщение "... E_FAIL". Можно ли сделать так, чтобы DBGrid все-таки заполнялся, но в тех местах, где происходит дел. на ноль просто выводилось "дел. на ноль", т.е. как заставить JetSQL продолжать выполнять запрос, даже если возникает дел. на ноль, и подставлять в этом случае "NULL"
sniknik (2004-11-10 12:57:00) [1]почему? посмотри то что у тебя не получается в аксесе, если там этот запрос получится то можно сделать, нет всегда можно самому просчитать (труднее конечно чем запрос, но возможно тем не менее).
Victor! (2004-11-10 12:46:00) [2]Да, видно не судьба
Victor! (2004-11-08 17:52:00) [3]Я повторюсь: " Если и использовать агрегативные функции (типа Avg(1/F1), где F1 иногда м/б 0) то возникает ошибка, сообщение "Деление на ноль" " - т.е. в случае, когда формула обрабатывает просто данные таблицы, то возвращается NULL, а только когда пытаешся их просуммировать или усреднить (Sum, Avg) возникает ошибка.
sniknik (2004-11-08 11:15:00) [4]> Че? Никто не знает?
в смысле?
оно всетаки помогло или нет? по описанию "другая беда" то же самое что и было до этого (для которого уже "Перенос курсора на сервер очень помог..." есть решение)
Victor! (2004-11-08 11:10:00) [5]Че? Никто не знает?
Victor! (2004-11-05 16:54:00) [6]Перенос курсора на сервер очень помог, теперь найдя Null, можно писать "Ошибка".
Но есть другая беда. Если и использовать агрегативные функции (типа Avg(1/F1), где F1 иногда м/б 0) то возникает ошибка, сообщение "Деление на ноль", причем это уже конкретно в JETe, потому как в Access возникает аналогичное сообщение, в DBGrid вообще ничего не появляется.
Но мне жизненно необходимо, чтобы если даже возникало дел. на ноль, писалось "Ошибка" в той ячейке где она возникает. Простой пример: есть база данных - часовые накопления показаний прибора. Энергетику надо посмотретьза месяц инфу по дням (т.е. группировка по часам а затем Sum или Avg).
Допустим в какой-то несчастный час, прибор сбоил и записал 0. И вот из-за одного показания, расчет какой либо формулы в которой нужно деление на это параметр, за целый месяц херится, вместо того, чтобы вывести например
..
25|знач
26|Ошибка
27|знач
Как быть, может есть другие драйвера баз данных, или другая возможность(хранимые пр-ры, или там не знаю). Потому что переводить все формулы создаваемые пользователем, в постфиксную форму и самому вычислять, ой как не хочется.
sniknik (2004-11-05 12:03:00) [7]поставь у компанента ADODataSet.CursorLocatoin = clUseServer
Victor! (2004-11-05 10:30:00) [8]А мне то чего делать, как мне с JET, этот самый курсор использовать
sniknik (2004-11-04 17:48:00) [9]> Попробывал в Accesse, получил:
> (правилн. значение)
> (правилн. значение)
> Ошибка
> (правилн. значение)
серверный курсор используют
Victor! (2004-11-04 17:20:00) [10]Попробывал в Accesse, получил:
(правилн. значение)
(правилн. значение)
Ошибка
(правилн. значение)
В JETe сразу "Деление на ноль" и икакой больше инфы.
Может есть какая-нибудь альтернатива JETу, желательно как в Accesse (хотя говорили что JET и Access это одно и тоже, одни и теже запросы они выполняют по-разному)
Victor! (2004-11-04 14:27:00) [11]Запрос может быть такого рода: (f1*f2 + f3/f4)/(f5*f6+(f7/f8)) т.е. все что угодно (f1..f8 поля таблицы), арифметическое выражение составляет пользователь (подобно созданию запросов в Access), поэтому проанализировать кождое частное в формуле не представляется возможным.
sniknik (2004-11-04 11:40:00) [12]iif(x=0, "дел. на ноль", y/x)
Johnmen (2004-11-04 11:02:00) [13]А где сам текст запроса ?