powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Полиморфизм
18 сообщений из 18, страница 1 из 1
Полиморфизм
    #32769044
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть функция Retrieve
Код: plaintext
long dwcontrol.Retrieve ( { any argument, any argument . . . } ) 
Как реализовать свою функицю с таким полиморфизмом.
...
Рейтинг: 0 / 0
Полиморфизм
    #32769084
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опишите у функции параметр "any Args[]" и вызывайте ее как:
Код: plaintext
Func( { 1 , 'A', date('01.01.2003')} )
...
Рейтинг: 0 / 0
Полиморфизм
    #32769118
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тогда Upperbound(Args) даст количество параметров?

пасиба
...
Рейтинг: 0 / 0
Полиморфизм
    #32769146
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ищё создать

Код: plaintext
Func()

для вызова без параметров?
...
Рейтинг: 0 / 0
Полиморфизм
    #32769356
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSопишите у функции параметр "any Args[]" и вызывайте ее как:
Код: plaintext
Func( { 1 , 'A', date('01.01.2003')} )


Скорее всего так, как написано, вообще работать не будет, поскольку РВшный компайлер считает fixed arrays и variable size arrays разными datatypes.
...
Рейтинг: 0 / 0
Полиморфизм
    #32769385
Я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Я
Гость
И это правда, покрайней мере по поводу retrieve
авторСкорее всего так, как написано, вообще работать не будет, поскольку РВшный компайлер считает fixed arrays и variable size arrays разными datatypes.
мой респект!
...
Рейтинг: 0 / 0
Полиморфизм
    #32769542
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп ASCRUSопишите у функции параметр "any Args[]" и вызывайте ее как:
Код: plaintext
Func( { 1 , 'A', date('01.01.2003')} )


Скорее всего так, как написано, вообще работать не будет, поскольку РВшный компайлер считает fixed arrays и variable size arrays разными datatypes.
Согласен, погорячился. Будет работать вот так:
Код: plaintext
1.
Func( {'1', 'A', '01.01.2003'} )
или вот так:
Код: plaintext
1.
2.
3.
4.
5.
any Args[]
Args[ 1 ] =  1 
Args[ 2 ] = 'A'
Args[ 3 ] = date('01.01.2003')
Func( List )

Спасибо за поправку, я обычно стринговые массивы так передаю, поэтому написал не подумавши массив any :)
...
Рейтинг: 0 / 0
Полиморфизм
    #32770394
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А тогда же как реализована функция
Код: plaintext
Retrieve ( { any argument, any argument . . . } )
ведь туда же передается не массив аргументов (fixed он или variable size), неужели у Retrieve прототипы на любое количество аргументов any?


И ещё тогда вопрос:
Если есть массив args[], то возможно ли его элементы передать в функцию Retrieve ? так как retrieve( args ) я думаю передаст как параметр весь массив?
...
Рейтинг: 0 / 0
Полиморфизм
    #32770463
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СотниковА тогда же как реализована функция
Код: plaintext
Retrieve ( { any argument, any argument . . . } )
ведь туда же передается не массив аргументов (fixed он или variable size), неужели у Retrieve прототипы на любое количество аргументов any?
Retrieve сделан разработчиками PB и его даже перенаследовать нельзя, так что воспользоваться таким способом передачи аргументов мы не можем.


СотниковИ ещё тогда вопрос:
Если есть массив args[], то возможно ли его элементы передать в функцию Retrieve ? так как retrieve( args ) я думаю передаст как параметр весь массив?
Я сделал CASE, в котором в зависимости от UpperBound переданного массива вызывается 0 - Retrieve (), 1 - Retrieve(Args[1]), 2 - Retrieve(Args[2]), ... 10 - Retrieve(Args[10]). Не скажу, что элегатно получилось, но главное работает. 10 параметров было сделано на всякий пожарный, я еще столько передаваемых параметров не видел, хотя при желании расширить недолго.
...
Рейтинг: 0 / 0
Полиморфизм
    #32770543
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSЯ сделал CASE, в котором в зависимости от UpperBound переданного массива вызывается 0 - Retrieve (), 1 - Retrieve(Args[1]), 2 - Retrieve(Args[2]), ... 10 - Retrieve(Args[10]). Не скажу, что элегатно получилось, но главное работает. 10 параметров было сделано на всякий пожарный, я еще столько передаваемых параметров не видел, хотя при желании расширить недолго.ASCRUS, при всем уважении к вам...
Вы написали следующее:
Код: plaintext
1.
2.
3.
Retrieve(Value1)
Retrieve(Value2)
...
Имелось ввиду вот это?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CHOOSE CASE upperBound (Args[])
CASE  0 
 Retrieve()
CASE  1 
 Retrieve(Args[ 1 ])
CASE  2 
 Retrieve(Args[ 1 ], Args[ 2 ])
...
CASE  10 
...
END CHOOSE
Или что-то другое?

2All
Если не полениться посмотреть linkage service в PFC, то можно найти вот такой вызов
Код: plaintext
1.
2.
3.
4.
5.
// This is a generic retrieve that will handle up thru  20  arguments.
ll_rc = idw_Requestor.Retrieve ( &
				la_args[ 1 ],  la_args[ 2 ],  la_args[ 3 ],  la_args[ 4 ],  la_args[ 5 ], &
				la_args[ 6 ],  la_args[ 7 ],  la_args[ 8 ],  la_args[ 9 ],  la_args[ 10 ], &
				la_args[ 11 ], la_args[ 12 ], la_args[ 13 ], la_args[ 14 ], la_args[ 15 ], &
				la_args[ 16 ], la_args[ 17 ], la_args[ 18 ], la_args[ 19 ], la_args[ 20 ] ) 
Смысл в том, что анализировать количество проинициализированных элементов в массиве не нужно, достаточно просто объявить массив из 20 (например) элементов и вызвать Retrieve с 20-ю параметрами. Если DW ожидает меньшее число аргументов, то это никак не скажется на функционировании приложения, лишние аргументы будут проигнорированы.
...
Рейтинг: 0 / 0
Полиморфизм
    #32770580
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень жалко. У меня реализовано аналогично через CASE, но хотел делать более универсальным.

Единствнное что мне ещё пришло в голову:
у меня работа со всеми DW реализована через процедуры, например Store Procedure Data:
Код: plaintext
execute dbo.s_polis_face; 1  @id_polis = :id_polis, @typeid = :typeid
появилась мысль убрать Retrieve Arguments, а Store Procedure Data сделать таким:
Код: plaintext
execute dbo.s_polis_face; 1  @id_polis = :param1, @typeid = ':param2'
и парсить DataWindow.Table.Procedure перед Retrive
...
Рейтинг: 0 / 0
Полиморфизм
    #32770602
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли не полениться посмотреть linkage service в PFC, то можно найти вот такой вызов
Спасибо за совет, будем знать.

P.S. Я вообще то вряд ли тяну на знатока PB, больше на руководителя проекта, которому нужно, чтобы клиентскую часть на PB писали, так что сильно пинать меня не стоит :)
...
Рейтинг: 0 / 0
Полиморфизм
    #32770634
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее так не получится:
Код: plaintext
execute dbo.s_polis_face; 1  @id_polis = :param1, @typeid = ':param2'

а вот так можно:
Код: plaintext
execute dbo.s_polis_face; 1  @id_polis = %param1%, @typeid = '%param2%'
...
Рейтинг: 0 / 0
Полиморфизм
    #32770647
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СотниковА тогда же как реализована функция
Код: plaintext
Retrieve ( { any argument, any argument . . . } )
ведь туда же передается не массив аргументов (fixed он или variable size), неужели у Retrieve прототипы на любое количество аргументов any?
Может быть, хотя и вряд ли. Или просто Compiler Magic .
...
Рейтинг: 0 / 0
Полиморфизм
    #32770918
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА тогда же как реализована функция Retrieve Сомневаюсь чтобы сам PB или его функция Retrieve были реализованы на PowerScript =)
В С++ такое декларирование функции запросто.

Ссылка по теме Retrieve:
Generic DataWindow Retrieval PBDJ v7.4

Успехов!
...
Рейтинг: 0 / 0
Полиморфизм
    #32771051
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На курсах Роман Кабанов говорил, что PB написан на PowerScripte (или большая его часть - не помню)
...
Рейтинг: 0 / 0
Полиморфизм
    #32771145
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СотниковНа курсах Роман Кабанов говорил, что PB написан на PowerScripte (или большая его часть - не помню)
В теле файла pbvm70.dll вижу вот такую строку " Microsoft Visual C++ Runtime Library ", к чему бы это?
Может, все-таки, речь о PFC шла?
...
Рейтинг: 0 / 0
Полиморфизм
    #32771331
Nividimka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет ничего нового под солнцем.
По этому кругу я уже ходил -с ....
http://www.google.ru/groups?hl=ru&lr=&frame=right&th=dd49e4c89f318312&seekm=3cfcb029%241%40news.ptt.ru#link1
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Полиморфизм
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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