powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Возможна ли смена SQL запроса в nestedах в композите?
24 сообщений из 24, страница 1 из 1
Возможна ли смена SQL запроса в nestedах в композите?
    #33358833
Вопрос
Возможна ли смена SQL запроса в nestedах в композите?

1.получил список ls_dwports
далее беру GetChild
из него "выцарапываю" SQL - без проблем
потом меняю через
if dwchild.Modify(datawindow.table.select) ='' then
ok!
end if
все проходит без сучка и задоринки - по факту SQL не меняется!

может это невозможно?

PB65ORA9
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33358897
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По какому факту?
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33359146
Mykola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если не трудно код покажите
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33359480
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
args:
 adw_1 ref u_dw - отчет
 ast_rep структура с параметрами отчета

script:

Long ll_Rep,ll_Count,ll_Num ,ll_ShmCnt
String ls_reports[],ls_sql,ls_ErrText
Boolean lb_ok=True
n_cst_string lnv_str
DataWindowChild ldwc_report

adw_1.of_SetBase(True)
ll_ShmCnt=UpperBound(ast_rep.ls_src[])
ll_Count=adw_1.inv_base.of_GetObjects(ls_reports,"report","*",True)
For ll_rep= 1  To ll_Count
	lb_ok=adw_1.GetChild(ls_reports[ll_rep],ldwc_report)> 0  
	If lb_ok Then
	Else
		ls_ErrText='Ошибка GetChild на Report='+ls_reports[ll_rep]
		exit;
	End If
	ls_sql=ldwc_report.GetSQLSelect()
	For ll_Num =  1  To ll_ShmCnt
		ls_Sql = lnv_str.of_GlobalReplace( ls_Sql, ast_rep.ls_src[ll_Num], ast_rep.ls_dst[ll_Num])
	Next
	lb_ok=ldwc_report.Modify('DataWindow.Table.Select="'+ls_sql+'"')=''
	If lb_ok Then 
	else
		ls_ErrText='Ошибка при смене представления на Report='+ls_reports[ll_rep]
		exit;
	End If
Next
If lb_ok Then
	return True
Else
	If len(ls_ErrText)= 0  Then
		ls_ErrText='Сообщение об ошибке не определено!'
	End If
	MessageBox('Внимание!',ls_ErrText,StopSign!)
	Return False
End If
Суть в простейшем приближении такова
Отчет должен строиться на разных представлениях в зависмости от прав пользователя. Подменяются представления на котором построен отчет.
Например: есть представления CLIENT_GNRL_ALL_SHOW (CLIENT_ADR_ALL_SHOW итд) для отображения данных пользователям Головного Офиса, и CLIENT_GNRL_PDR_SHOW (CLIENT_ADR_PDR_SHOW итд) для отображения данных доступных структурному подразделению. Должна меняться часть представления с "_ALL_SHOW" на "_PDR_SHOW"
Отчет состоит из пяти вложенных DW и одного композита.
В результате скрипта ошибка не выдается, но при retrieve - 5 раз "table or view does not exists". Тобишь читает из представлений на которых нет доступа.
Это подтверждается если в событии DbError в DWControle проставить
Код: plaintext
MessageBox('SQL!',sqlsyntax)

У меня есть смутное подозрение что Sybase не предусмотрел такую возможность
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33359655
zolg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вообще то modify string возвращает.
если работает без подмены и не работает после значит, что-то всетаки меняется...
после modify посмотрите какой select получился
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33359693
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может и ни в этом проблема, но совет дам
GetSQLSelect выдает не совсем тот select который надо использовать при модификации, т е если забираешь через GetSQLSelect то и устанавливаешь через SetSQLSelect
Но возможно лучше просто поменять минимум nested, а лучше весь композит - в плане уменьшения глюков
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33359787
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Long ll_Rep,ll_Count,ll_Num ,ll_ShmCnt
String ls_reports[],ls_sql,ls_ErrText
Boolean lb_ok=True
n_cst_string lnv_str
DataWindowChild ldwc_report

adw_1.of_SetBase(True)
ll_ShmCnt=UpperBound(ast_rep.ls_Src[])
ll_Count=adw_1.inv_base.of_GetObjects(ls_reports,"report","*",True)
For ll_rep= 1  To ll_Count
	lb_ok=adw_1.GetChild(ls_reports[ll_rep],ldwc_report)> 0  
	If lb_ok Then
	Else
		ls_ErrText='Ошибка GetChild на Report='+ls_reports[ll_rep]
		exit;
	End If
	ls_sql=ldwc_report.Describe('DataWindow.Table.Select')
	For ll_Num =  1  To ll_ShmCnt
		ls_Sql = lnv_str.of_GlobalReplace( ls_Sql, ast_rep.ls_src[ll_Num], ast_rep.ls_dst[ll_Num])
	Next
	lb_ok=ldwc_report.Modify('DataWindow.Table.Select="'+ls_sql+'"')=''
	If lb_ok Then 
	else
		ls_ErrText='Ошибка при смене представления на Report='+ls_reports[ll_rep]
		exit;
	End If
	if not ldwc_report.Describe('DataWindow.Table.Select')=ls_sql then
		ls_ErrText='Смена представления на Report='+ls_reports[ll_rep]+'не произошла!'
		exit;
	end if
Next

if lb_ok then
	adw_1.SetTransObject(sqlca)
	if adw_1.RetRieve( 489 )< 0  then
		return False
	end if
end if

If lb_ok Then
	return True
Else
	If len(ls_ErrText)= 0  Then
		ls_ErrText='Сообщение об ошибке не определено!'
	End If
	MessageBox('Внимание!',ls_ErrText,StopSign!)
	Return False
End If

Подставил retrieve прямо в скрипт дабы "исключить наводки" - Аналогично!
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360011
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня уже многие тут слегка заприкалывали, но все же попробуй проретрайвить весь композит
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360073
Код: plaintext
1.
2.
3.
4.
5.
6.
if lb_ok then
  adw_1.SetTransObject(sqlca)
  if adw_1.RetRieve( 489 )< 0  then
    return False
   end if
end if

Это ретрайвится весь композит
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360400
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так
DWObject InsideReport
InsideReport = dw_composit_window.object.d_inside_window
ls_sql=InsideReport.GetSQLSelect()
ls_sql=replace(.....)
InsideReport.SetSqlSelect(ls_sql)
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360417
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да кстати может Settransobject еще разочек вставить после смены sql
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360457
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только сейчас вспомнил
Сам пытался так сделать
Под отладчиком работало-менялось
Скомпилил - хоть ты тресни
Кончилось тем что просто представления на пользователей настроил и завязал
Мне так проще было
Кстати ошибок тоже не давало
Может проще SyntaxFromSQL использовать
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360644
А что мне даст SyntaxFromSQL? там жеж дизайн "рухнет"!
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360684
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логично
Тогда сделать datastore в нем Syntax
а в nesred копировать строки
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360823
Изворачиваться я тоже умею )))

я так понимаю мыслей ни у кого больше нет?
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360920
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если представление то может просто фильтр наложить
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360926
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или сделать представление на представление в соответствии с пользователями
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360932
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто если используется Oracle то на уровне СУБД проще получается
Для каждого свои представления делаются
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360936
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа create synonym user.grd_all for grd_podr
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33360991
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__НуТипаГость____Вопрос
Возможна ли смена SQL запроса в nestedах в композите?

1.получил список ls_dwports
далее беру GetChild
из него "выцарапываю" SQL - без проблем
потом меняю через
if dwchild.Modify(datawindow.table.select) ='' then
ok!
end if
все проходит без сучка и задоринки - по факту SQL не меняется!

может это невозможно?

PB65ORA9
Ответ, абсолютно точно возможно, если делаешь правильно...
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33361152
zolg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
замена select в PB без проблем если не меняются update propertis, а
при смене view именно они и меняются , что runtime и блокирует

у меня такое проходило под Oracle если основной запрос заворачивался сл.образом select * from ( select ..... ), т.е. update propertis "пустые",
но опять же стабильности не добился.
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33361177
Филиппу:
НУ И ЧТО НЕПРАВИЛЬНО ДЕЛАЮ? 8-\

zolg-у:
у меня нет Update настройки в отчете
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33361427
zolg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
может быть я не совсем правильно с терминологией обшелся...
update propertis-это не только разрешен update или нет, какой таблицы и по каким полям, но и инфа - какое поле DW к какому полю какой таблицы из БД соответствует, вот это как раз и надо скрыть.

вариант с view или procedure ..(param .. , .. out ref cursor) мне больше нравится
и подобной логики можно зашить больше и сменить ее не меняя клиента..

на крайний случай добавте в DW еще один параметр и им развяжите запрос
select * from _ALL_SHOW where :a_parm_aux='1'
union all
select * from _PDR_SHOW where :a_parm_aux='2'
но грантировать пользователям придется оба view - админы без радости отнесутся...
...
Рейтинг: 0 / 0
Возможна ли смена SQL запроса в nestedах в композите?
    #33361607
Ладно, что нибудь придумаю
Всем спасибо
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Возможна ли смена SQL запроса в nestedах в композите?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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