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

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

а вообще лучше сразу преобразовать все это дело в SQL запросе
...
Рейтинг: 0 / 0
27.05.2004, 16:25
    #32537132
marvan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
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
27.05.2004, 16:29
    #32537149
sYstEmiZer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
То-то я смотрю, что Nz в ВБА не припомню :)
...
Рейтинг: 0 / 0
27.05.2004, 16:43
    #32537184
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
с помощью if реализовала, но хотела перейти к др варианту, так это лишние проверки, кот занимают ресурсы и память
а VBA есть такая штука Nz. Может я неправильно понимаю ее назначение, но она стоит в моем коде и при попадании на нее курсора ошибки не выдается
...
Рейтинг: 0 / 0
27.05.2004, 16:46
    #32537192
irinka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
почему не VBA?
В Access есть VBA, на кот мы и пишим.
А что значит это не VBA, а Access
...
Рейтинг: 0 / 0
27.05.2004, 17:03
    #32537241
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
iif(isnull(a), 0, a)

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

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
01.06.2004, 12:41
    #32542569
EDUDK01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
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
01.06.2004, 14:04
    #32542805
boevik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
если NULL надо преобразовать в пустую строку, то я использую следующую конструкцию
Код: plaintext
1.
sString = rs.fields("samefield") & ""

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


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

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

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


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

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

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


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

--------------------------------------------------
Никогда не говори никогда
...
Рейтинг: 0 / 0
01.06.2004, 16:10
    #32543116
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
Я понял о чем речь :)
Суть в том, что привычка - страшная штука и иногда пытаешься проделывать "несовместимые" финты :( (т.е. переносишь "не сознательно" логику программирования с одного языка на другой, не задумываясь о последствиях)
...
Рейтинг: 0 / 0
01.06.2004, 18:25
    #32543449
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
Ребят не совсем правильно поняли суть вопроса и значение функции 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
01.06.2004, 19:04
    #32543541
Шайтан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
2SergeySV
где это ты нашёл, что Nz может работать с объектами и отлавливать Nothing?
Шайтан
...
Рейтинг: 0 / 0
02.06.2004, 10:18
    #32544082
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть в VB6 аналог Nz как в VBA
Увлекся привык уже к своей MyNz(), которая со всеми работает
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / есть в VB6 аналог Nz как в VBA / 25 сообщений из 61, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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