powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / есть в VB6 аналог Nz как в VBA
25 сообщений из 61, страница 1 из 3
есть в VB6 аналог Nz как в VBA
    #32536979
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть в VB6 аналог как VBA Nz(траля ля, 0) или Nz(траля ля, "")
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537022
sYstEmiZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем занимается Nz в VBA?
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537032
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если значение 0,то преобразует как скажешь к "" или к др
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537078
Фотография Alviga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю тебе нужно Null преобразовать
проверяй переменную

if xVar is Null Then
.............
End if

а вообще лучше сразу преобразовать все это дело в SQL запросе
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537132
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nz это не VBA это Access (Member of Access.Application)
можно так:
If IsNull(mVariant) Then mString = "Text"

Код: plaintext
1.
Private Sub Test()    Dim mInp As Variant    Dim mOut As String    mInp = Null        mOut = Nz(mInp, "Not Found") \' mOut равен "Not Found"        If IsNull(mInp) Then mOut = "Пусто" \' mOut равен "Пусто"End Sub
Как отформатирован этот код?
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537149
sYstEmiZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То-то я смотрю, что Nz в ВБА не припомню :)
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537184
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с помощью if реализовала, но хотела перейти к др варианту, так это лишние проверки, кот занимают ресурсы и память
а VBA есть такая штука Nz. Может я неправильно понимаю ее назначение, но она стоит в моем коде и при попадании на нее курсора ошибки не выдается
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537192
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему не VBA?
В Access есть VBA, на кот мы и пишим.
А что значит это не VBA, а Access
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537241
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iif(isnull(a), 0, a)

?
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537257
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irinka почему не VBA?
Внимательно читаем предыдущие посты, если не верим - смотрим Object Browser
Nz это не VBA это Access (Member of Access.Application)
paparomeiif(isnull(a), 0, a)
красиво
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537362
EDUDK01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBA не VBA, Nz это тот же paparome-ский вариант конвертнутый во встроенную функцию :)
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537363
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не мой вариант, это почти "классика" :)
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32537367
EDUDK01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 paparome:
о том и речь, но подкинул ты его вовремя, что сказать, МОЛОДЕЦ :)
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32539884
arseny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Íèêîãäà íå ãîâîðè êîãäà
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32542349
Yuriy Goodz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну я решил для себя этот вопрос так.

Public Function nzn(mynull As Variant) As Variant

If IsNull(mynull) Then
nzn = 0
Else
nzn = mynull
End If

End Function

Public Function nzt(mynull As Variant) As Variant

If IsNull(mynull) Then
nzt = ""
Else
nzt = mynull
End If

End Function
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32542569
EDUDK01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Yuriy Goodz:

А какое отношение эти функции имеют к функции Nz()?
Логика функции Nz() состоит в возможности подстановки собственных значений если результирующее значение функции равно False. А в приведенных тобой вариантах возможность подстановки значений отсутсвует.

Во вторых, если функция возвращает строго текстовое или числовое значение то зачем хранить эти значения в формате Variant?

В третих, если ты переменную MyNull определяешь как Variant, то зачем писать две разные функции, одну для числовый значений а другую для текстовых? Как вариант, напиши одну функцию которая будет проверять сначала формат данный а затем уже значение этих данных.

А вообще, eсли следовать твоей логике, то правильный вариант функции будет выглядеть так:

Public Function myNz(myValue, myResult As Variant) As Variant
If IsNull(myValue) Then
myNz = myResult
Else
myNz= myValue
End If

End Function
Ну это собственно по примерам, а так, конечно лучший вариант это использование функции IIf.
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32542805
boevik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если NULL надо преобразовать в пустую строку, то я использую следующую конструкцию
Код: plaintext
1.
sString = rs.fields("samefield") & ""

--------------------------------------------------
Никогда не говори никогда
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32542812
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то я использую следующую конструкцию
sString = rs.fields("samefield") & ""


Привыкнешь, перейдешь на MSSQL, и это тебе ой как откликнется :)

А так - да, красиво :)
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32542990
boevik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторто я использую следующую конструкцию
sString = rs.fields("samefield") & ""

Привыкнешь, перейдешь на MSSQL, и это тебе ой как откликнется :)


Причем тут привязка к базе данных. Это не зависит от базы.
Работаю с Access и с MS SQL и все работает.

--------------------------------------------------
Никогда не говори никогда
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32543030
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду, что в T-SQL

Код: plaintext
1.
Set @f = Null
Set @f = @f + '123' -- Врнет NULL, а не строку
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32543112
boevik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
paparomeЯ имел ввиду, что в T-SQL


Тогда ясно, я говорил про VB6

--------------------------------------------------
Никогда не говори никогда
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32543116
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял о чем речь :)
Суть в том, что привычка - страшная штука и иногда пытаешься проделывать "несовместимые" финты :( (т.е. переносишь "не сознательно" логику программирования с одного языка на другой, не задумываясь о последствиях)
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32543449
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят не совсем правильно поняли суть вопроса и значение функции Nz

Ваш IsNull() кроме самого значение Null ничего больше не отловит

В то время как сила(удобство) функции Nz() (из VBE; VBE-среда visual basic в Access) отлавливает все возможные варианты нулевости (что очень бывает нужно в запросах):
1. s="" (Dim s as String)
2. i=0 (Dim i as Long/Integer/Double)
3. v=Null (Dim v as Variant)
4. o=Nothing (Dim o as Object)

Соответственно чтобы сотворить свой аналог Nz(), надо в выше приведенных примерaх функций заменить IsNull() на например такой IsNullMy()

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Public Function IsNullMy(Value As Variant) As Boolean
  
On Error GoTo Er_
    
  Select Case VarType(Value)
    Case vbEmpty
      IsNullMy = True
    Case vbNull
      IsNullMy = True
    Case  2  To  5 ,  7  ' vbInteger, vbLong, vbSingle, vbDouble, vbDate
      If Value = 0 Then _
        IsNullMy = True
    Case 9 ' vbObject
      If TypeName(Value) = "Nothing" Then _
         IsNullMy = True
    Case vbString
      If Len(Value) =  0  Then _
        IsNullMy = True
    Case  8192  To  8203 , Is >  8205 
      If UBound(Value) =  0  Then IsNullMy = True
        
  End Select

Ex_:
  Exit Function

Er_:
  MsgBox Err.Description
  Resume Ex_
   
End Function
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32543541
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SergeySV
где это ты нашёл, что Nz может работать с объектами и отлавливать Nothing?
Шайтан
...
Рейтинг: 0 / 0
есть в VB6 аналог Nz как в VBA
    #32544082
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увлекся привык уже к своей MyNz(), которая со всеми работает
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / есть в VB6 аналог Nz как в VBA
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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