Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Задача для знатаков Delphi,Ms Access и технологии ADO / 15 сообщений из 15, страница 1 из 1
03.06.2003, 22:39
    #32175704
singaevskii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
Задача: Есть таблица в 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
03.06.2003, 22:43
    #32175707
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
А так попробоать:
Код: 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
04.06.2003, 22:20
    #32176845
singaevskii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
Нет. Во первых, IsNULL имеет формат IsNull(имя поля). Во вторых возвращает логическое значение (ложь или истина, т.е. 0 или 1), а мне нужна сумма чисел.
...
Рейтинг: 0 / 0
04.06.2003, 22:34
    #32176858
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
Странно, что NZ не работает, вроде через Jet должно. Спросите на форуме по Access. Но если работает isNull(Field), то что мешает сделать

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

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

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

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

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
05.06.2003, 16:17
    #32177612
Lisichkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
А почему нельзя сделать так?
Код: 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
05.06.2003, 21:59
    #32177945
singaevskii
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
Спасибо Serge_S. Этот запрос в дельфе действительно работает. Правда слишком громоздко. (ведь на самом деле таблиц в реальной базе не две)
Может быть что-то можно сделать с провайдером ADO?
...
Рейтинг: 0 / 0
05.06.2003, 22:43
    #32177963
Serge_S
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
Да, можно - не пользоваться :-))
...
Рейтинг: 0 / 0
06.06.2003, 09:06
    #32178043
Victor Mitrofanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
Попробуйте использовть функцию 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
06.06.2003, 09:30
    #32178061
Victor Mitrofanov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задача для знатаков Delphi,Ms Access и технологии ADO
Еще вариант - в датасете в делфи создать вычисляемое поле.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Задача для знатаков Delphi,Ms Access и технологии ADO / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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