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

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

Код: plaintext
Func()

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


Скорее всего так, как написано, вообще работать не будет, поскольку РВшный компайлер считает fixed arrays и variable size arrays разными datatypes.
...
Рейтинг: 0 / 0
04.11.2004, 17:46
    #32769385
Я
Я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полиморфизм
И это правда, покрайней мере по поводу retrieve
авторСкорее всего так, как написано, вообще работать не будет, поскольку РВшный компайлер считает fixed arrays и variable size arrays разными datatypes.
мой респект!
...
Рейтинг: 0 / 0
04.11.2004, 19:13
    #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
05.11.2004, 12:24
    #32770394
Сотников
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полиморфизм
А тогда же как реализована функция
Код: plaintext
Retrieve ( { any argument, any argument . . . } )
ведь туда же передается не массив аргументов (fixed он или variable size), неужели у Retrieve прототипы на любое количество аргументов any?


И ещё тогда вопрос:
Если есть массив args[], то возможно ли его элементы передать в функцию Retrieve ? так как retrieve( args ) я думаю передаст как параметр весь массив?
...
Рейтинг: 0 / 0
05.11.2004, 12:50
    #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
05.11.2004, 13:17
    #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
05.11.2004, 13:28
    #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
05.11.2004, 13:36
    #32770602
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полиморфизм
авторЕсли не полениться посмотреть linkage service в PFC, то можно найти вот такой вызов
Спасибо за совет, будем знать.

P.S. Я вообще то вряд ли тяну на знатока PB, больше на руководителя проекта, которому нужно, чтобы клиентскую часть на PB писали, так что сильно пинать меня не стоит :)
...
Рейтинг: 0 / 0
05.11.2004, 13:44
    #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
05.11.2004, 13:50
    #32770647
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полиморфизм
СотниковА тогда же как реализована функция
Код: plaintext
Retrieve ( { any argument, any argument . . . } )
ведь туда же передается не массив аргументов (fixed он или variable size), неужели у Retrieve прототипы на любое количество аргументов any?
Может быть, хотя и вряд ли. Или просто Compiler Magic .
...
Рейтинг: 0 / 0
05.11.2004, 15:27
    #32770918
rcryo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Полиморфизм
авторА тогда же как реализована функция Retrieve Сомневаюсь чтобы сам PB или его функция Retrieve были реализованы на PowerScript =)
В С++ такое декларирование функции запросто.

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

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


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