powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передача данных аргументу ParamArray varParam()
10 сообщений из 10, страница 1 из 1
Передача данных аргументу ParamArray varParam()
    #32660311
Benzin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные этому аргументу передаются перечислением, через запятую:
Код: plaintext
Call Процедура("Первый", "Второй", "Третий", "Четвертый")
, а как быть если надо это перечисление формировать программно, т.е., в зависимости от условий список будет меняться?
Сборка в строковую переменную не проходит: в процедуру передается что-то типа:
Код: plaintext
Call Процедура("Первый, Второй, Четвертый")
и ParamArray не хочет признавать это за три параметра.
Пробовал создать еще один массив varМассив(10) As Variant, заполнять его по ходу работы программы:
Код: plaintext
1.
2.
3.
4.
5.
varМассив(i) = "Первый"
i=i+ 1 
........
varМассив(i) = "Второй"
i=i+ 1 
........ 
, а потом передавать его:
Код: plaintext
Call Процедура(varМассив())
так не передается - значение UBound(varParam())=0
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660313
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант - создаешь массив с параметрами
далее, для каждого кол-ва параметров своя строка вызова
Select Case i
case 1:
Call Процедура(varМассив(1))
case 2:
Call Процедура(varМассив(1),varМассив(2))
case 3:
Call Процедура(varМассив(1),varМассив(2),varМассив(3))


и поехали
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660334
Benzin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как, посчитать через UBound(varМассив()) число элементов промежуточного массива, а потом через Select Case...?
А массивы просто не передаются - как, скажем, переменные?
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660340
vam911
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем считать, после заполненияю Посчитать можно и в процессе (там в примерчике неко i было - вот его и юзай).

Передать массив вместо ряда параметров нельзя. Это связано с принципами передачи параметров в функции и процедуры.

Но данное дейсвие можно сэммитировать - создав свою функцию на примере приведенной и вызывая из нее нужную.
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660342
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Просто не надо пользоваться ParamArray, и всё.
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660375
Alexey Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделать две весии, одна счеловеческим параметром Array, вторая-с ParamArray, тело из одной строчки -вызов первой поцедуры
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660659
SRG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SRG
Гость
vam911Передать массив вместо ряда параметров нельзя. Это связано с принципами передачи параметров в функции и процедуры.

Это почему же нельзя?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub my_SubArrOper(varArr As Variant)
Dim i As Long

For i =  0  To UBound(varArr)
MsgBox varArr(i)
Next i

End Sub

Sub my_subArrInit()
Dim arrLngI() As Long
Dim i As Long

ReDim arrLngI( 0  To  10 )

For i =  0  To UBound(arrLngI)
arrLngI(i) = i
Next i

Call my_SubArrOper(arrLngI)
End Sub
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660744
Benzin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 SRG:
Может "нельзя" у vam911 относится именно к использованию ParamArray?
2 vam911:
Предложенный тобой способ (с Select Case) работает, с одной заковыкой: поскольку заранее неизвестно максимальное значение i, пришлось наляпать этих Case > максимально разумно-возможного(в последней ветке - 15 параметров!). И все-равно: а вдруг когда случится, что i будет еще больше?
2 ВС:
А как, в данном случае без ParamArray? У меня здоровенная процедура, с разветвлениями, в этих ветвях запросы на изменение, каждый удачно выполненный запрос должен разместить где-то свою "квитанцию". Все "квитанции" в итоге обрабатываются(см. топик "Перебор значений поля запроса и сравнения его с массивом "). Можно, конечно, не копить "квитанции", а вызывать обработку для каждой.....
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660762
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
во-первых, это конечно криво, но можно объявить глобальную переменную массив.
во-вторых, если мне не изменяет память, у аксесса были какие-то встроенные средства для работы с переменнным числом параметров.
в-третьих, что мешает делать call function("первый, второй, девятнадцатый"), а в теле функции уже анализировать этот аргумент и пускать цикл от 1 до (количества запятых+1)?
...
Рейтинг: 0 / 0
Передача данных аргументу ParamArray varParam()
    #32660784
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
BenzinА как, в данном случае без ParamArray?
С обычным массивом и обычным параметром без ParamArray.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Передача данных аргументу ParamArray varParam()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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