Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / IsMissing любит Variant, но не любит Long / 25 сообщений из 26, страница 1 из 2
18.12.2003, 14:10
    #32356755
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
Имеем
Код: 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
18.12.2003, 14:20
    #32356778
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
Читай хелп по этой функции там все написано
...
Рейтинг: 0 / 0
18.12.2003, 14:24
    #32356786
Нуф-нуф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
Наверно потому, что только Вариант может иметь значение Empty (не инициализировано), а все прочие (?), во всяком случае точно Long обязательно имеют значение по сути своей...

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

Код: 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
18.12.2003, 14:29
    #32356795
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
Не сказано. Но это есть так.
IsMissing = IsEmpty
Long не может быть empty, сталбыть не может быть missing
...
Рейтинг: 0 / 0
18.12.2003, 14:34
    #32356813
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
incold
Ну так это одно и то же.
Написано, "Функция IsMissing возвращает True, если в указанный аргумент не было передано значение; в противном случае возвращается False"
написав test(), я что, передал значение?
Я что, должен кажую функцию проверять, в каких условиях она работает, а в каких - нет? В доке - одно, а на деле - другое.
...
Рейтинг: 0 / 0
18.12.2003, 14:38
    #32356821
фыыф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
Едал я эту собаку. Все что имеет определенный тип, такой, что переменная получает значение уже при объявлении (или инициализированно в предложении Optional каким-нить значением) никогда не бывает миссинг.


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

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
18.12.2003, 14:44
    #32356833
Varan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
incold, ты б перевел, я ж тебе не лингвист, по-русски то иногда хрен поймешь, чего сказано.
...
Рейтинг: 0 / 0
18.12.2003, 14:46
    #32356838
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
2Varan
>Короче, все надо проверять, отовсюду может появиться западло :-(

Надо так:

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

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

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

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

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

Код: 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
18.12.2003, 14:56
    #32356855
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
Access XP Sp1

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

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

msgbox ismissing(ai)

end sub


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

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

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

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

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

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
18.12.2003, 15:11
    #32356890
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IsMissing любит Variant, но не любит Long
2 фыыф

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


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