powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Задача для знатаков Delphi,Ms Access и технологии ADO
15 сообщений из 15, страница 1 из 1
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32175704
singaevskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: Есть таблица в MS Access 2000, в ней два числовых поля. Необходимо создать запрос выводящий для каждой записи сумму этих двух полей.

Все бы хорошо, но если одно из значений Null, то и вся сумма будет Null

В Access все решается просто, с использованием функции Nz(). Т.е. получается запрос вида:

SELECT Table1.Field1, Table1.Field2, Nz(Table1.Field1,0)+Nz(Table1.Field2,0)
FROM Table1;

Но, в Delphi при соединении с данной базой через ADO (провайдер Microsoft Jet 4), если в ADOQuery.SQL создать этот же самый запрос возникает ошибка вида:

Неопределенная функция 'Nz' в выражении

Если, кто-нибудь сталкивался с данной проблемой и успешно ее решил пожалуйста помогите (очень нужно !).
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32175707
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так попробоать:
Код: plaintext
1.
2.
3.
4.
SELECT
  Table1.Field1,
  Table1.Field2,
  (ISNULL(Table1.Field1, 0 )+ISNULL(Table1.Field2, 0 )) AS fld_summ
FROM Table1;
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32176845
singaevskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. Во первых, IsNULL имеет формат IsNull(имя поля). Во вторых возвращает логическое значение (ложь или истина, т.е. 0 или 1), а мне нужна сумма чисел.
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32176858
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, что NZ не работает, вроде через Jet должно. Спросите на форуме по Access. Но если работает isNull(Field), то что мешает сделать

IFF(isNull(Field),0,Field)
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32176859
Serge_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если
SELECT Table1.Field1, Table1.Field2, Table1.Field1+Table1.Field2
FROM Table1 Where not IsNull(Table1.Field1) and not IsNull(Table1.Field2);
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177034
singaevskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Re: а если
SELECT Table1.Field1, Table1.Field2, Table1.Field1+Table1.Field2
FROM Table1 Where not IsNull(Table1.Field1) and not IsNull(Table1.Field2);

Этот запрос возвращает сумму только тех строк где нет пустых занчений.
А это не провильно.
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177133
IgorK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то вы товарищь, singaevskii, путаете - цитата из BOL:

Код: plaintext
1.
2.
3.
4.
ISNULL
Replaces NULL with the specified replacement value.

Syntax
ISNULL ( check_expression , replacement_value ) 
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177195
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2IgorK, вот и я тоже там смотрел!
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177571
SiDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бол тут ни при чем. Аксесс<>сиквел. Там isnull другая.
То singaevskii: С iif тоже не работает?
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177578
Serge_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон.

SELECT Table1.Field1, Table1.Field2, Table1.Field1+Table1.Field2
FROM Table1 Where Table1.Field1 is not null and Table1.Field2 is not null
union all
SELECT Table1.Field1, Table1.Field2, Table1.Field1
FROM Table1 Where Table1.Field1 is not null and Table1.Field2 is null
union all
SELECT Table1.Field1, Table1.Field2, Table1.Field2
FROM Table1 Where Table1.Field1 is null and Table1.Field2 is not null

Во, без функций вообще, но коряво
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177612
Lisichkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему нельзя сделать так?
Код: plaintext
1.
2.
SELECT Table1.Field1, Table1.Field2, 
Iif(Isnull(Table1.Field1), 0 , Table1.Field1)+ Iif(Isnull(Table1.Field2), 0 , Table1.Field2)
FROM Table1;
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177945
singaevskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Serge_S. Этот запрос в дельфе действительно работает. Правда слишком громоздко. (ведь на самом деле таблиц в реальной базе не две)
Может быть что-то можно сделать с провайдером ADO?
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32177963
Serge_S
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, можно - не пользоваться :-))
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32178043
Victor Mitrofanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте использовть функцию iif:

SELECT Table1.Field1, Table1.Field2, iif(Table1.Field1 is null,0,Table1.Field1)+iif(Table1.Field2 is null,0,Table1.Field2) FROM Table1;
...
Рейтинг: 0 / 0
Задача для знатаков Delphi,Ms Access и технологии ADO
    #32178061
Victor Mitrofanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант - в датасете в делфи создать вычисляемое поле.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Задача для знатаков Delphi,Ms Access и технологии ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]