powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / IsMissing любит Variant, но не любит Long
25 сообщений из 26, страница 1 из 2
IsMissing любит Variant, но не любит Long
    #32356755
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Function test1(Optional Variable1) As String
If IsMissing(Variable1) = True Then
   'Вариант 1
 test1 = "обязательный аргумент не задан"
   Else
   'Вариант2
 test1 =  "обязательный аргумент задан" 
End If
End Function
Function test2(Optional Variable1 As Long) As String
If IsMissing(Variable1) = True Then
   'Вариант 1
 test2 = "обязательный аргумент не задан"
   Else
   'Вариант2
 test2 =  "обязательный аргумент задан" 
End If
End Function



в окне отладки :
Код: plaintext
1.
2.
3.
?test1()
обязательный аргумент не задан
?test2()
обязательный аргумент задан

Это что за очередной прикол? Почему эта IsMissing любит варианты и не любит лонги?
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356778
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читай хелп по этой функции там все написано
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356786
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно потому, что только Вариант может иметь значение Empty (не инициализировано), а все прочие (?), во всяком случае точно Long обязательно имеют значение по сути своей...

Для решения подобной задачи сделай что-то вроде того:
Function test2(Optional Variable1 As Long = -2147483647) As String
где -2147483647 это заведомо никогда сознательно не передаваемое в функцию значение. Потом проверишь эту переменную на это значение...
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356790
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
incold
Ничего там не написано.
"Функция IsMissing используется для проверки передачи аргументов в процедурах, имеющих необязательные аргументы. Функция IsMissing возвращает True, если в указанный аргумент не было передано значение; в противном случае возвращается False. Если для конкретного аргумента функция IsMissing возвращает значение True, то использование этого аргумента в других программных конструкциях может привести к возникновению определяемой пользователем ошибки. Для аргументов, описанных с ключевым словом ParamArray, функция IsMissing всегда возвращает False. Для обнаружения пустых элементов ParamArray, следует проверить, не задано ли для верхней границы массива значение, меньшее, чем для нижней границы."
Ну и где тут сказано, что она только с вариантами нормально работает?
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356793
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня такой хелп:

Код: 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.
Returns a Boolean value indicating whether an optional Variant argument has been passed to a procedure.

Syntax

IsMissing(argname)

The required argname argument contains the name of an optional Variant procedure argument.

Remarks

Use the IsMissing function to detect whether or not optional Variant arguments have been provided
in calling a procedure. IsMissing returns True if no value has been passed for the specified argument;
otherwise, it returns False. If IsMissing returns True for an argument, use of the missing argument in
other code may cause a user-defined error. If IsMissing is used on a ParamArray argument, it always
returns False. To detect an empty ParamArray, test to see if the array’s upper bound is less than
its lower bound.

Note   IsMissing does not work on simple data types (such as Integer or Double) because, unlike
Variants, they don't have a provision for a "missing" flag bit. Because of this, the syntax for typed
optional arguments allows you to specify a default value. If the argument is omitted when the
procedure is called, then the argument will have this default value, as in the example below:

Sub MySub(Optional MyVar As String = "specialvalue")
    If MyVar = "specialvalue" Then
        ' MyVar was omitted.
    Else
    ...
End Sub

In many cases you can omit the If MyVar test entirely by making the default value equal to the value
you want MyVar to contain if the user omits it from the function call. This makes your code more
concise and efficient.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356795
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не сказано. Но это есть так.
IsMissing = IsEmpty
Long не может быть empty, сталбыть не может быть missing
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356813
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
incold
Ну так это одно и то же.
Написано, "Функция IsMissing возвращает True, если в указанный аргумент не было передано значение; в противном случае возвращается False"
написав test(), я что, передал значение?
Я что, должен кажую функцию проверять, в каких условиях она работает, а в каких - нет? В доке - одно, а на деле - другое.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356821
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Едал я эту собаку. Все что имеет определенный тип, такой, что переменная получает значение уже при объявлении (или инициализированно в предложении Optional каким-нить значением) никогда не бывает миссинг.


пока не ткнешься лбом, не поймешь, что справка мелкософта (в данном случае Акс97) "верна приблизительно", но не верна "в принципе".
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356826
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, все надо проверять, отовсюду может появиться западло :-(
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356827
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напишу еще раз, но уже с форматированием как в хелпе

Returns a Boolean value indicating whether an optional Variant
argument has been passed to a procedure.

Use the IsMissing function to detect whether or not optional Variant arguments...
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356833
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
incold, ты б перевел, я ж тебе не лингвист, по-русски то иногда хрен поймешь, чего сказано.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356838
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Varan
>Короче, все надо проверять, отовсюду может появиться западло :-(

Надо так:

Короче, надо читать хелпы, а то может появиться западло :-(

для тебя наверное удивительно будет,
но если объявить переменную (например Dim l as long) не инициализируя оную, то она будет равна 0.
вот ведь западло :)
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356844
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Senin Viktor ,
Я прекрасно видел этот 0 в отладчике. Я о том, что Help по данному вопросу неверный.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356845
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я тоже не лингвист, но знаю, что если в хелпе что-то выделено жирным шрифтом, значит это служебные слова.

Я понял справку так:
Returns a Boolean value indicating whether an optional Variant
argument has been passed to a procedure

Возвращает логическое выражение, показывающее был ли передан в процедуру необязательный Variant параметр.

Может я плохо понимать по английски.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356851
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
incold,
А в моем Access моя справка стоит, а не твоя. И там про Variant ничего не написано
За перевод - спасибо.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356853
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое что можно сделать - это

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Function test2(Optional Variable1 As Variant ) As String
If IsMissing(Variable1) = True Then
   'Вариант 1
 test2 = "обязательный аргумент не задан"
   Else
   'Вариант2
 test2 =  "обязательный аргумент задан" 
End If
End Function
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356855
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Access XP Sp1

Кстати только что проверил такую вещь

Код: plaintext
1.
2.
3.
4.
sub test(optional ai as long)

msgbox ismissing(ai)

end sub


Мне выдает True или False в зависимости от того указал я параметр или нет.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356860
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот блин поторопился.
Выдает всегда False

Так что в справке все правильно.
Это функцией корректно проверяются только Variant параметры
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356864
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2incold

а что у тебя выдаст при
Call test(0) ?
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356868
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Пока я писал опровержение своих слов, тебя уже стали терзать смутные сомнения ?
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356870
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
incold ,
Значит и в тоей доке - вранье, с моей точки зрания в таком варианте должна вообще генерироваться ошибка компиляции и говорить: "Нельзя эту функцию с Long использовать."
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356873
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Senin Viktor

прекрасно, что с течением времени некоторые формулировки справок мелкософта имеют тенденцию к повышению достоверности. Но повторяю, в Акс97 (справка по которому, кстати, организована не в пример лучше справки 2000, что демонстрирует нам и обратные тенденции) эта тема освещена не лучшим, с точки зрения достоверности формулировок, образом.

Засим, утверждение "Короче, надо читать хелпы, ..." есть безосновательный (чтобы не сказать грубее, но точнее:) наезд. Лингвисты вы наши, еёна вошь.
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356884
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще одно предложение из справки - непроскроллировал

Note: IsMissing does not work on simple data types (such as Integer or Double) because, unlike Variants, they don't have a provision for a "missing" flag bit.

Еще поработаю лингвистом.

IsMissing не работает с простыми типами данных (...), потому что кроме Variants, у них отсутствует бит используемый для "missing"
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356890
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 фыыф

Так что наезд про справку вполне основательный
...
Рейтинг: 0 / 0
IsMissing любит Variant, но не любит Long
    #32356894
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
incold,
У них там бит отсутствует, а я из-за этого целый час потерял.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / IsMissing любит Variant, но не любит Long
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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