Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Входящие параметры процедуры DW  [new]
Badger
Member

Откуда: Москва
Сообщений: 243
Привет у нас пишут PB 9.0.3

Может кто знает, как получить значения параметров хранимой процедуры в DW.

Идея такая. Если отчет не выдал ни одной строчки, (или сформировал но не то что нужно), то нужно по нажатию клавиши сформировать строку запуска процедуры С ПАРАМЕТРАМИ по которой данный отчет не выдал ни то что нужно.

Строку самой хранимой процедуры легко получаем:
dw_1.Decribe ('Datawindow.Table.Procedure')
dw_1.Decribe ('Datawindow.Table.Select')

А как получить значения параметров ?
29 апр 21, 14:59    [22316406]     Ответить | Цитировать Сообщить модератору
 Re: Входящие параметры процедуры DW  [new]
Riska
Member

Откуда: Израиль
Сообщений: 1003
Не очень понятно, что нужно получить?
dw_1.Decribe ('Datawindow.Table.Arguments')
2 май 21, 15:09    [22317492]     Ответить | Цитировать Сообщить модератору
 Re: Входящие параметры процедуры DW  [new]
Badger
Member

Откуда: Москва
Сообщений: 243
Riska, Параметр 'Datawindow.Table.Arguments' и 'Datawindow.Table.Procedure' перечисляют одни и те же описанные параметры вызова в DataWindow, а не их значения. Выглядят они так:

'Datawindow.Table.Arguments' = id number~r~n data_start datetime~r~n data_end datetime
'Datawindow.Table.Procedure' = 1 execute dbo.sp_name @id = :id, @data_start = :data_start, @data_end = :data_end

А мне нужны сами значения этих параметров.
4 май 21, 11:06    [22318155]     Ответить | Цитировать Сообщить модератору
 Re: Входящие параметры процедуры DW  [new]
Riska
Member

Откуда: Израиль
Сообщений: 1003
long	ll_pos_tab, ll_pos_new_line, li_i
string	ls_arg_full_text, ls_arguments, ls_arg_name[], ls_arg_type[], ls_arg_value[]
string ls_TAB = char(9), ls_new_line = char(10)

ls_arg_full_text = dw_1.Describe("DataWindow.table.arguments")  
IF ls_arg_full_text = '?' OR ls_arg_full_text = '!' THEN ls_arg_full_text = ''

DO WHILE ls_arg_full_text <> ''
	li_i++
	ll_pos_tab = Pos(ls_arg_full_text, ls_TAB)
	
	ls_arg_name[li_i] = Left(ls_arg_full_text, ll_pos_tab - 1)
	ls_arg_value[li_i] = dw_1.Describe("Evaluate('" + ls_arg_name[li_i] + "', 0)")
	
	ll_pos_new_line = Pos(ls_arg_full_text, ls_new_line, ll_pos_tab + 1)
	IF ll_pos_new_line = 0 THEN ll_pos_new_line = Len(ls_arg_full_text) + 1
	ls_arg_type[li_i]  = Mid(ls_arg_full_text, ll_pos_tab + 1, ll_pos_new_line - ll_pos_tab - 1)
	
	ls_arg_full_text = Mid(ls_arg_full_text, ll_pos_new_line + 1)
	
	ls_arguments = 	ls_arguments + ls_new_line + char(13) + &
							ls_arg_name[li_i] + Fill(' ', 25 - len(ls_arg_name[li_i])) + ls_TAB + &
							ls_arg_type[li_i] + Fill(' ', 15 - len(ls_arg_type[li_i])) + ls_TAB + &
							ls_arg_value[li_i] 
							
LOOP

MessageBox('Arg', ls_arguments )
4 май 21, 14:35    [22318303]     Ответить | Цитировать Сообщить модератору
 Re: Входящие параметры процедуры DW  [new]
Badger
Member

Откуда: Москва
Сообщений: 243
Riska, Это то, что нужно! Спасибо огромное!!!!
4 май 21, 16:04    [22318355]     Ответить | Цитировать Сообщить модератору
 Re: Входящие параметры процедуры DW  [new]
Badger
Member

Откуда: Москва
Сообщений: 243
Riska, еще раз спасибо, функция работает прекрасно, но есть один недостаток.

Если имя входного поля, хранимой процедуры, совпадает с именем исходящего поля в этой же процедуре, а само значение поля в процедуре поменялось, то функция Evaluate
ls_arg_value[li_i] = dw_1.Describe("Evaluate('" + ls_arg_name[li_i] + "', 0)")
возвращает текущее значение поля, а не то с которым процедура была вызвана. И с этим, похоже, ничего нельзя поделать.
5 май 21, 20:33    [22318980]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить