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

Откуда:
Сообщений: 2558
Добрый день всем! Вопрос чисто теоретический.
Есть система написанная на PowerBuilder -9.0. Рядом с ней существует конструктор отчётов на Infomaker для пользователей (исторически кто то так задамал),
отчёты в Infomaker делают аналитики, но при глюках поддерживаем мы...
Замысел в чём внутри основной системы забодяжить конструктор отчётов, тоесть аналитик генерит с помощью инфомейкера sql скрипт , сохраняет с помощью интерфейса в базе и собственно таким образом перечень отчётов перетечёт в базу и инфомекер останется только у аналитиков (они толковые - знают структуру, поэтому базу подвесить не должны).

Динамически можно использовать SyntaxFromSQL , но он к сожалению не принимает параметры, а требует сразу значения. А хотелось бы чтобы динамически создавалась datastore или dw , которая знала о своих параметрах и при retrieve запрашивала их у пользователя.
Это вообще возможно можно сделать?
Спасибо!
23 апр 09, 14:40    [7104919]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
Можно - называется конструктор отчетов. Вот как у меня выглядит.
SyntaxFromSQL - для создания структуры DataStore педварительно выполняет запрос - время выполнения будет в два раза больше, так что нужно предусмотреть кеширование созданных DataStore.
Параметры в запрос можно передавать например через временную таблицу.
Запрашивать параметры - это нужно самому формочку написать чтобы она запрашивала на основе того, что там аналитики настроят.
23 апр 09, 15:17    [7105269]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
Спасибо, Марк! Почитаю!!!
23 апр 09, 16:38    [7106052]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
Марк, маленький вопросик, а как вы генерите srd файл, ну например есть у вас процедура, есть её параметры и их типы, а дальше - как мне srd файл получить?, в базе то понятно, что лучше srd в блобе хранить... Можно ли пример в студию, если не жаль, на вашем сайте я ответа не нашёл...
23 апр 09, 16:54    [7106199]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
Поднимаю тему, для конкретного уточнения:

Вот так работает :
ls_sql = ' select rn from PAYMENTS_UNION where rn = 3 '
ls_syntax = oracle_tr.SyntaxFromSQL (ls_sql,'Style(Type=grid)',ls_errors)

А как сделать типо:
ls_sql = ' select rn from PAYMENTS_UNION where rn = :rn'
ls_syntax = oracle_tr.SyntaxFromSQL (ls_sql,'Style(Type=grid)',ls_errors)
Чтобы ругачек не было и потом datastore нормально построилась...???
24 апр 09, 10:03    [7108522]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
ZhV
Member

Откуда: СПб
Сообщений: 252
Порядок такой

1.В вашем select-е место для переменной заменить "узнаваемой" константой,
например:
Select id,
         Decode(id,123456789,1,0) marker
WHERE id=123456789 

2.Используете SyntaxFROMSQL - создаете строку syntax
В этой строке находите подстроку
ll_pos1 = POS(ls_synt,'retrieve="')
а затем "после" ll_pos - ищете позицию первой конструкции "text(" или "column(" - ll_pos2

3. Выделяете три подстроки
- от начала до до ll_pos1 - неизменно
- от ll_pos2 до конца - неизменно
- "середина" - от ll_pos1 до ll_pos2 делаете следующее

4. Вот в этой середине
- замещаете все подстроки '123456789' на ':n_id'
- дополняете в конец
ls_mid += '~r~narguments=(("n_id", number)) '

5. Снова собираете все три подстроки в одну, и создаете из этого syntax-а datawindow
24 апр 09, 10:42    [7108792]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
Спасибо, распарсивание строки конечно подойдёт, но если параметров несколько, да и ещё разных типов, ну например штук 7. Сложно как то распарсиванием , да и ещё и динамечески всё это провернуть....
Мне кажется Марк как то по другому делал...
24 апр 09, 11:36    [7109229]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3154
boogiman
Марк, маленький вопросик, а как вы генерите srd файл, ну например есть у вас процедура, есть её параметры и их типы, а дальше - как мне srd файл получить?, в базе то понятно, что лучше srd в блобе хранить... Можно ли пример в студию, если не жаль, на вашем сайте я ответа не нашёл...

srd файл с отчетом или с процедурой? С отчетом - это external datawindow которое можно рисовать в InfoMaker, PowerBuilder и подкладывать в pbd или в виде внешнего srd файла.
С процедурой - как-то так:
ls_sql = "exec dbo." + SRP.sp_name[1]
ls_syntax = SQLCA.SyntaxFromSQL(ls_sql,"style(type=grid)",ls_errors)	
...
ds = create uo_DataStore
ds.create(ls_syntax,ls_errors)
А параметры в процедуру через временные таблицу(ы) передавать (сама процедура без параметров). В принципе могут быть какие-либо тонкости при работе со временными таблицами в Oracle - не в курсе.
27 апр 09, 09:55    [7116262]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
Спасибо Марк! Я решил что у меня будет нечто среднее между Вашим подходом и ZhV .
1. Я буду брать sql-скрипт и обрезать его до условия where (тоесть без параметров)
2. Делаю datastore и далее распарсиваю его :
а) Запоминаю часть до select
б) Запоминаю часть после text которая
3. Делаю итоговый datastore :
Часть a) + sql-скрипт первоначальный (вместе с where) + образую строку аргументов
(сами аргументы с их типами аналитик вводит в конструкторе) + б)

Примерно то же будет и спроцедурами. Как плюс в таком подходе, что можно аргументы в русской раскладке давать типа = Дата_начала.
Всем спасибо!
27 апр 09, 15:30    [7118798]     Ответить | Цитировать Сообщить модератору
 Re: Простой конструктор - SyntaxFromSQL  [new]
boogiman
Member [заблокирован]

Откуда:
Сообщений: 2558
P.S.
Скрипт можно устанавливать и через ds_1.setsqlcode(sql_str)
27 апр 09, 15:32    [7118812]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить