|
|
|
| подскажите пожалуйста почему эта строчка
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, не могу понять почему... какие идеи? | |
|
| |
|
|
|
| при этом когда переписал код так, то он работает во всех случаях...вот чешу репу не понимаю в чем косяк, кто подскажет??? проблему хоть и решил но все таки интересно узнать...
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) & " " & """" | |
|
| |
|
|
|
| Справку не читаете или читаете невнимательно.
В VBA функции IIF, Switch, Choose вычисляют выражения во всех аргументах, а уже затем возвращают значение, соответствующее условию. Т.е. ваша Replace(rst.Fields(3), """", """""") выполняется даже когда Null в rst.Fields(3), и вызывает ошибку.
Потэтому, а также в случаях, когда в аргументах применяются долгоиграющие вычисления (например DSum), умные люди в умных книжках и советуют максимально ограничить их использование в коде.
В запросах и вычисляемых полях эти функции ведут себя иначе - в контрольных выражениях допускают любые операторы SQL и вычисляют только выражение, соответствующее условию. | |
|
| |
|
|
|
| виноват... видимо прочитал ОЧЕНЬ не внимательно:(
то есть если это реализовал бы этот код VBA в поле то это наверно отработало бы? | |
|
| |