Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: invalid use null
 
 автор: joka   (24.06.2009 в 17:06)   личное сообщение
 
 

подскажите пожалуйста почему эта строчка
IIf(Not IsNull(rst.Fields(3)), "Выдан: " & Replace(rst.Fields(3), """", """""") & Chr(13) & Chr(10), "")

в следующем коде вызывает ошибку?
Me.Поле6.ControlSource = "= ""№ " & rst.Fields(2) & Chr(13) & Chr(10) & _
IIf(Not IsNull(rst.Fields(3)), "Выдан: " & Replace(rst.Fields(3), """", """""") & Chr(13) & Chr(10), "") & _
"Дата выдачи: " & rst.Fields(4) & Chr(13) & Chr(10) & _
IIf(Not IsNull(rst.Fields(5)), "Действует по: " & rst.Fields(5) & Chr(13) & Chr(10), "") & _
IIf(Not IsNull(rst.Fields(6)), "Примечание: " & rst.Fields(6), "") & Chr(13) & Chr(10) & """"

то что вызывает именно она проверял. до корректирвоки строчка выглядела
"Выдан: " & Replace(rst.Fields(3), """", """""") & Chr(13) & Chr(10)
все работало и сейччас работает, но ошибка возникает если rst.Fields(3) = Null, не могу понять почему... какие идеи?

  Ответить  
 
 автор: joka   (24.06.2009 в 17:30)   личное сообщение
 
 

при этом когда переписал код так, то он работает во всех случаях...вот чешу репу не понимаю в чем косяк, кто подскажет??? проблему хоть и решил но все таки интересно узнать...

str = ""
If Not IsNull(rst.Fields(2)) Then str = str & "№ " & rst.Fields(2)
If Not IsNull(rst.Fields(3)) Then str = str & Chr(13) & Chr(10) & "Выдан: " & rst.Fields(3)
If Not IsNull(rst.Fields(4)) Then str = str & Chr(13) & Chr(10) & "Дата выдачи: " & rst.Fields(4)
If Not IsNull(rst.Fields(5)) Then str = str & Chr(13) & Chr(10) & "Действует до: " & rst.Fields(5)
If Not IsNull(rst.Fields(6)) Then str = str & Chr(13) & Chr(10) & "Примечания: " & rst.Fields(6)
Me.Поле6.ControlSource = "= """ & Replace(str, """", """""") & Chr(13) & Chr(10) & " " & """"

  Ответить  
 
 автор: Анатолий (Киев)   (24.06.2009 в 17:52)   личное сообщение
 
 

Справку не читаете или читаете невнимательно.
В VBA функции IIF, Switch, Choose вычисляют выражения во всех аргументах, а уже затем возвращают значение, соответствующее условию. Т.е. ваша Replace(rst.Fields(3), """", """""") выполняется даже когда Null в rst.Fields(3), и вызывает ошибку.
Потэтому, а также в случаях, когда в аргументах применяются долгоиграющие вычисления (например DSum), умные люди в умных книжках и советуют максимально ограничить их использование в коде.
В запросах и вычисляемых полях эти функции ведут себя иначе - в контрольных выражениях допускают любые операторы SQL и вычисляют только выражение, соответствующее условию.

  Ответить  
 
 автор: joka   (24.06.2009 в 18:52)   личное сообщение
 
 

виноват... видимо прочитал ОЧЕНЬ не внимательно:(
то есть если это реализовал бы этот код VBA в поле то это наверно отработало бы?

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList