powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать, передан ли аргумент в процедуру?
11 сообщений из 11, страница 1 из 1
Как узнать, передан ли аргумент в процедуру?
    #39634395
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет

Ыы... понадобилось узнать при выполнении процедуры передан ли в неё необязательный аргумент
Например:

Public Sub Открыть_форму_Команды(Optional ByRef фильтр As Boolean)

Дело в том, что в случае вызова процедуры без аргумента, он всё равно будет равен False. А мне надо знать точно, указан он или нет.

Заранее спасибо
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39634472
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настаевмне надо знать точно, указан он или нет.Это невозможно. Optional параметр всё равно формируется, вне зависимости от того, указан он в операторе вызова или нет - это тебе не ParamArray. И поэтому в момент старта процедуры он существует в обязательном порядке. И нет возможности определить, имеет он значение по умолчанию, или это присвоенное.
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39634496
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо определенного типа задаете параметр типа Variant, тогда сможете точно отпределить, что он не был передан функцией IsMissing. Если все же нужны определенные типы, то присваиваете определенное значение по умолчанию, обозначающее, что параметр не был передан. Например я в подобных случаях для строковой переменной задаю Optional strParm As String = "{Missing}". Для подобного фокуса с Boolean приходится заменять на свой тип с неизвестным состоянием. Но лучше все же variant, но тогда в процедуре желательно проверять тип переданного параметра перед использованием, чтобы избежать ошибок.
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39634508
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Настаев,

Если тип данных Variant, то можно использовать функцию IsMissing и узнать, передано ли значение аргумента.
Ну а если тип данных String, то можно использовать StrPtr для этих же целей.
Если же тип Object, то можно проверить Is Nothing.
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39634533
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
studierenНу а если тип данных String, то можно использовать StrPtr для этих же целей.
Если же тип Object, то можно проверить Is Nothing.
Эти способы ненадежны, т.к. если параметр не будет пропущен, но будет передана неинициализированная строка, то StrPtr также вернет 0, как и при пропущеном параметре. То же самое и с объектом, передача объекта Nothing - это вполне обычная ситуация, определить нельзя достоверно, был ли он опущен.
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39634794
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 способ. тип изменить на byte, а в boolean преобразовывать уже в процедуре, например по правилу, если 0-параметр не передавался, -1 true, 1-false, или ещё как..
2 способ.поставить другой параметр, и при присваивании значения optional параметру ставить этот параметр в true
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39634925
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за идеи
очень полезная инфа :) ща буду прикручивать
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39634963
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinВместо определенного типа задаете параметр типа Variant, тогда сможете точно отпределить, что он не был передан функцией IsMissing. Если все же нужны определенные типы, то присваиваете определенное значение по умолчанию, обозначающее, что параметр не был передан. Например я в подобных случаях для строковой переменной задаю Optional strParm As String = "{Missing}". Для подобного фокуса с Boolean приходится заменять на свой тип с неизвестным состоянием. Но лучше все же variant, но тогда в процедуре желательно проверять тип переданного параметра перед использованием, чтобы избежать ошибок.

Спасибо, друг
я изменил тип аргумент на Variant , проверил с помощью isMissing и преобразовал в Boolean c помощью CBool
Всё заиграло новым красками ))
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39635093
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НастаевMrShinВместо определенного типа задаете параметр типа Variant, тогда сможете точно отпределить, что он не был передан функцией IsMissing. Если все же нужны определенные типы, то присваиваете определенное значение по умолчанию, обозначающее, что параметр не был передан. Например я в подобных случаях для строковой переменной задаю Optional strParm As String = "{Missing}". Для подобного фокуса с Boolean приходится заменять на свой тип с неизвестным состоянием. Но лучше все же variant, но тогда в процедуре желательно проверять тип переданного параметра перед использованием, чтобы избежать ошибок.

Спасибо, друг
я изменил тип аргумент на Variant , проверил с помощью isMissing и преобразовал в Boolean c помощью CBool
Всё заиграло новым красками ))

Единственное, что утаил от народа тредстартер: зачем это может понадобиться?

ЗЫ. Вот понапрограммируют такие горе-программисты - а потом, разгребай...
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39635171
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222, ну это то просто, учитывая название процедуры и явно указанное byref являющееся умолчальным - он использует форму в разных режимах, переменную возвращает, если форма является подчиненной, например.
...
Рейтинг: 0 / 0
Как узнать, передан ли аргумент в процедуру?
    #39636353
Настаев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фанатзёры ))
Я процедуру с потолка написал, чтобы вопрос понятней был

А нужно мне это вот зачем...
Я написал xml-файлы для создания своей ленты в Access. Чтобы элемент управления (кнопка, например) среагировал на нажатие, там прописано следующее:
onAction="Название_процедуры"
Разумеется, что для каждой кнопки создана своя процедура. Я поставил себе цель проверять перед запуском любой процедуры выполнять какие-то одинаковые действия. Например, проверить права пользователя. Чтобы не вставлять эту проверку в каждую из процедур, я создал одну единственную, которая запускается при нажатии на любую из кнопок ленты.

Так вот...
Эта единственная процедура делает, что ей надо и только потом запускает следующую методом Run "control.id" , где control.id совпадает с названием запускаемой процедуры. Поскольку некоторые из кнопок являются переключателями, они требуют передачи аргумента Pressed. Для них нужен вызов с аргументом. Вот так: Run "control.id" , pressed

Я думаю, что удовлетворил ваш интерес
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как узнать, передан ли аргумент в процедуру?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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