Чем заменить функцию Nz в запросах?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Чем заменить функцию Nz в запросах?

Сообщение Leon_ » 30.06.2004 (Ср) 15:48

В Access 2002 есть полезная функция Nz
You can use the Nz function to return zero, a zero-length string (" "), or another specified value when a Variant is Null. Variant.

Я использую ее в SQL-инструкциях, передаваемых мною запросам DAO. А чем можно заменить Nz при использовании ADO?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.06.2004 (Ср) 15:54

Какая-то есть. Попробуй NVL (правда это из Oracle).
Lasciate ogni speranza, voi ch'entrate.

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 30.06.2004 (Ср) 16:50

Я нашел в MSDN ссылку na ISNULL
Код: Выделить всё
ISNULL(check_expression, replacement_value)

И вроде это должно работать в T-SQL :?

Но вызвать метод Open рекордсета ADO с инструкцией SQL, включающей
Код: Выделить всё
"SELECT [Client], Sum(ISNULL([Freight], 0)+ISNULL([Stoppage], 0)) AS [Total], Sum(1) AS [CountHaul] FROM qryDispatchIncome"

не получается.
Run-time error '-2147217900 (80040e14)'

Куда с этим бежать? :?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 30.06.2004 (Ср) 17:33

а чем тебе функция iif не нравиться?

Код: Выделить всё
SELECT id, iif(isnull(desc),'null',desc) AS DESCR, data
FROM test


Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 01.07.2004 (Чт) 8:25

:roll: А разве такие функции, как iif удовлетворяют стандарту SQL ANSI-92?
Я конечно, попробую, но совсем в этот вариант не верю :cry:

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 01.07.2004 (Чт) 12:44

если работаешь через ADO с базой MDB, то все будет ОК

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 01.07.2004 (Чт) 12:48

Да, забыл предупредить, надо юзать провайдера Microsoft Jet 4.0 OLE DB Provider.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 02.07.2004 (Пт) 10:23

Leon_ писал(а):Но вызвать метод Open рекордсета ADO с инструкцией SQL, включающей
Код: Выделить всё
"SELECT [Client], Sum(ISNULL([Freight], 0)+ISNULL([Stoppage], 0)) AS [Total], Sum(1) AS [CountHaul] FROM qryDispatchIncome"

не получается.
Run-time error '-2147217900 (80040e14)'

Куда с этим бежать? :?


Ты используешь функцию sum без указания поля, по которому производится группировка. Может в этом все дело? Попробуй написать так:
Код: Выделить всё
"SELECT [Client], Sum(ISNULL([Freight], 0)+ISNULL([Stoppage], 0)) AS [Total], Sum(1) AS [CountHaul] FROM qryDispatchIncome GROUP BY [Client]"

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 02.07.2004 (Пт) 11:04

2Sedge: Да, спасибо за участие. Но думаю, дело не в группировке,- qryDispatchIncome не содержит повторяющихся клиентов. (Кстати, проверил- тот же результат)

Всем:
Я использовал такую инструкцию, передавая ее рекордсету ADO при доступе к MDB-базе:
Код: Выделить всё
"SELECT qryDispatchIncome.[Client], Sum(Nz([Freight])+Nz([Stoppage])+Nz([Delivery])) AS [Total], Sum(1) AS [CountHaul] FROM qryDispatchIncome"

И тут я захотел избавиться от всех вызовов встроенных функций Access 2002 (в т.ч. и Nz()), чтобы подготовиться к переводу базы на MS SQL Server. Вот в чем суть задачи.

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 02.07.2004 (Пт) 12:30

Ну, я конечно не знаю. Но у меня инструкция вида

Код: Выделить всё
select [p_seson_id], sum(isnull([p_price_rub], 0)) as [Сумма(руб)], sum(isnull([p_price_val], 0)) as [Сумма(USD)]  from tblProdaza
group by [p_seson_id]


отлично отрабатывает. Вот прямо только что отчет на ее основе построил.

Или ты пытаешься так обратиться к Access-у?

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 02.07.2004 (Пт) 12:53

:? Да, я пытался использовать isnull в запросах к Access'у (MDB-базе), и получал ту ошибку (см. выше)

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 02.07.2004 (Пт) 13:21

А разве в Access-е IsNull принимает два параметра? Я могу ошибаться, но мне кажется, что она принимает один параметр и возвращает битовое значение (или True/False) в зависимости от содержания этого параметра.

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 02.07.2004 (Пт) 13:40

Да в том-то и дело! :D Конечно!
По-крайней мере, теперь с ошибкой этой все ясно, спасибо.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 5

    TopList