powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / О пользе функции Nz в запросах
8 сообщений из 8, страница 1 из 1
О пользе функции Nz в запросах
    #32707480
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос
Код: plaintext
1.
SELECT DealList.Comment, Len(Brackets([DealList].[Comment])) AS Expr1
FROM DealList;
в котором поле Comment - текстовое, а функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function Brackets(Comment As String) As String
Dim ib As Integer, ie As Integer, str As String
Brackets = ""
str = Nz(Comment, "")
ib = InStr( 1 , str, "<")
ie = InStr( 1 , str, ">")
If ib >  0  And ie > ib Then
Brackets = Left(str, ie -  1 )
Brackets = Right(Brackets, Len(Brackets) - ib)
End If
End Function
извлекает из этого поля текст, заключенный в угловые скобки <...>, если таковой есть. Вроде бы в самой функции стоит обработка возможности полю Comment быть IsNull.
Но запуск запроса дает мне =Error в тех строках, в которых поле действительно пустое, причем простановка BrakePoint дает, что на этих строках запрос ВООБЩЕ функцию Brackets не спрашивает!
Если же Nz заранее вставить
Код: plaintext
1.
SELECT DealList.Comment, Len(Brackets(Nz([DealList].[Comment],""))) AS Expr1
FROM DealList;
, то все работает как надо.

Почему так???
Если уважаемые монстры ответят на этот вопрос, тогда может и другой задавать не потребуется.
...
Рейтинг: 0 / 0
О пользе функции Nz в запросах
    #32707499
vasiliy04
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возможно нужно поставить в функции optional,
аргумент пустой поэтому ошибка
...
Рейтинг: 0 / 0
О пользе функции Nz в запросах
    #32707500
IgorM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что тип String не может принимать Null, если критично обрабатывать Null внутри функции, поменяй тип аргумента на Variant.
...
Рейтинг: 0 / 0
О пользе функции Nz в запросах
    #32707505
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка в объявлении типа входного параметра.

Код: plaintext
Public Function Brackets(Comment As String) As String
Миф не может преобразовать Null в String

напиши так
Public Function Brackets(Comment As Variant) As String

или так

Public Function Brackets(Comment As Variant) As String





(с выражением лица)
...
Рейтинг: 0 / 0
О пользе функции Nz в запросах
    #32707507
мфышдшн04
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Public Function Brackets(Optional Comment As String) As String
...
Рейтинг: 0 / 0
О пользе функции Nz в запросах
    #32707525
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин! Зараза! Скотина! Сволочь!...
медленно остываю
Дело в том, что в более длинном запросе ОНО работает!:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT DealList.PartStatus, DealTypeTerms.DealStageName,
 Status.StatusText, Status.StatusComment, DealTypeTerms.Item,
 DealList.PartStatus, Status.StatusID, DealList.Amount, Status.StatusText,
 DealList.Comment, DealList.DealID, DealList.PartTypeID, ([Item]> 1  Or 
(DealList.MaxOfStatus)= 7 ) AS Expr1, Status.StatusID, Deals.DealName, Brackets
([DealList.Comment]) AS BracketsComment, Companies.FullCompanyNameRus, Len
(Brackets([DealList.Comment])) AS LB

FROM (Companies RIGHT JOIN Filials ON Companies.CompanyID = Filials.CompanyID)
 RIGHT JOIN (Deals RIGHT JOIN (DealTypeTerms RIGHT JOIN (DealList LEFT JOIN
 Status ON DealList.MaxOfStatus = Status.StatusID) ON DealTypeTerms.DTTID = 
DealList.DTTID) ON Deals.DealID = DealList.DealID) ON Filials.FilialID = 
DealList.FilialID

WHERE (((DealList.DealID)=get_DealID()) AND ((DealList.PartTypeID)
=get_PartTypeID()) AND ((([Item]> 1  Or ([DealList].[MaxOfStatus])= 7 ))=True) AND
 ((([Item]> 1  Or Len([DealList].[Comment])> 0 ))=True) AND ((IsNull
([DealList.Amount]))=False))

ORDER BY DealTypeTerms.Item DESC , DealList.PartStatus, Status.StatusID DESC ,
 DealList.Amount DESC , Companies.FullCompanyNameRus;
Там где надо нули поле LB дает нули. НО!!! Полученный набор НЕ ФИЛЬТРУЕТСЯ ПО ЭТОМУ ПОЛЮ! Т.е. если я в отчете хочу фильтр LB>0 поставить, то он футболит меня пешком в эротический поход. Полдня бьюсь с отчетом, забросил излюбленный Shell, а тут такая засада!

Это все из серии "Иногда Аксесс умеет преобразовывать типы"???
PS А как в коде подкрасить текст?
...
Рейтинг: 0 / 0
О пользе функции Nz в запросах
    #32707548
Фотография Лифчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Variant решил проблему, Optional чего-то сразу не сработал

Спасибки!
...
Рейтинг: 0 / 0
О пользе функции Nz в запросах
    #32707568
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Пардон, что с опозданием. Optional - это не для того. Это чтобы аргумент вообще не указывать, а не чтобы передавать значение Null.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / О пользе функции Nz в запросах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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