Страница 3 из 3
Добавлено: 21 мар 2008, 10:53
Александр
короче вот такая запись внедренного массива не проходит
(зведочка вполне правомерна все имена колонок определены в виде)
Добавлено: 21 мар 2008, 11:09
Александр
это я все к тому что если во внедренном массиве оставить только параметр и все и в качестве параметра передавать строку запроса целиком 'select * from lsdbo.Ric_PSft_view' то это не проходит
вобщем запрос внедренного массива обязательно должен содержать осмысленную/фиксированную секцию FROM
Добавлено: 21 мар 2008, 11:14
Anderyt
надо на примере..
напишите функцию Лоции, в которую вы вставили запрос и куда вы хотите передать параметры.
если отметите, что именно является параметром и какого типа (строка, число) - попробую привести синтаксис...
по крайней мере с exec_SQLSelect в действиях над объектами мы такое делать практически научились..
так что жду примера

Добавлено: 21 мар 2008, 11:24
Александр
Андрей ну давай еще раз
1.Есть форма работы
2.На най есть
Масив
3.Массив создается внедренным запросом
4.Запрос вводится через контекстное меню массива 'Внедрить SQL Select'
5.Этот запрос вглядит так '
select * from lsdbo.Ric_PSft_view' он возвращает 4 колонки т.е. массив
6. У меня
есть еще три View которыми бы я хотел наполнять
тот же самый массив
7. Я делаю переменную
myView чтобы передавать через нее интересующий меня вид например
lsdbo.Ric_PSft_view
8 Я модифицирую внедренный SQL Select на запись вида '
select * from :myView'
9 Данный синтаксис не проходит - ошибка
10 Сижу и думаю как обойти данную проблему

Добавлено: 21 мар 2008, 11:28
Anderyt
хм... а вот с "Внедрить SQL Select" я не работал....

могу только послать вас в Теххелп

Добавлено: 21 мар 2008, 11:29
Александр
Добавлено: 21 мар 2008, 11:41
Anderyt
привожу функцию из ДЕЙСТВИЯ НАД ОБЪЕКТАМИ.
там можно написать вот так:
Код: Выделить всё
Var_array_version_IDs = Set ( f_ExecSQLSelect_2 ('execute lsdbo.custom_proc_get_ver_ids_of_child_objects_wo_rights '+a_Object + ', '+ var_group + ', ~''+ var_ver_rights+'~'', '',';')+';' )
обратите внимание, a_Object и var_group - числовые параметры, поэтому вставляются просто в разрыв строки.
var_ver_rights - строковый параметры, нужно, чтобы он был выделен одинарными кавычками, поэтому используются ~'' и '~'.
а вот если название вида...
название вида мы не передавали.
можно попробовать ставить его так же, как и числовые переменные... вдруг прокатит..
в крайнем случае, можно сделать так:
Код: Выделить всё
f_ExecSQLSelect_2(
case(var_my_view
when is = 'my_view_1' then 'select * from lsdbo.my_view_1'
when is = 'my_view_2' then 'select * from lsdbo.my_view_2'
),'',''
)
коряво, но работать должно.
если нет - то прямая дорога в Теххелп

Добавлено: 21 мар 2008, 11:49
Александр
все же давай вернемся к WorkFlow к многомерным массивам (не спискам)

ведь речь идет именно о них - не так ли
давай спрошу по другому
1. есть массив WorkfLow
2. он заполняется запросом
3. пусть не через контекстное меню пусть через
(f_EmbeddedSQLSelect ( this , ' <SQLSelect_Statement> ' , ' <ArgsList> ' , ' <FormVarName> ' )
ВОПРОС
можно ли данную процедуру выполнять неоднократно в процессе работы
т.е. фактически в реальном времени пересоздавать СТРУКТУРУ массива???
ИЛИ
можно ли данный вызов записать как
Код: Выделить всё
(f_EmbeddedSQLSelect ( this , 'select * from :myView' , 'lsdbo.Ric_PSft_view' , ' мой массив ' )
???
Добавлено: 21 мар 2008, 12:11
Anderyt
Александр, если совсем коротко - я НЕ ЗНАЮ.
сам я такого не пробовал, поэтому не могу сказать, можно или нет.
я просто предложил некоторые способы, как можно попробовать.
но вот что смущает... а можно в EmbeddedSQLSelect использовать select * ??
мы обычно используем запросы по какой то конкретной колонке, ведь массивы все одномерные..
или я ошибаюсь?
Добавлено: 21 мар 2008, 12:28
Александр
да с одной стороны массивы конечно одномерные

но собранные вместе в одной форме
верхнего массива они становятся многомерными
давай вообще отвлечемся и поставлю вопрос по другому
можно ли разнести этапы создания и наполнения массива?
в идеале...
я на форме делаю многомерный ПУСТОЙ строковый массив
для чего
1. Создаю переменную Массив1 типа массив, и 4 переменных колонка1, колонка2, колонка3, колонка4 также типа массив
для физического создания массива на форме Массив1 делаю внедренный запрос
Код: Выделить всё
Select
'' as колонка1
'' as колонка2
'' as колонка3
'' as колонка4
Получаю ПУСТОЙ массив с именем Массив1 состоящий из 4х колонок
теперь второй момент - нужно заполнить его
как это можно сделать
1. Просто в действии над переменными добавить новую строку
или
а вот тут и сам вопрос
можно ли заполнить уже созданный пустой массив результатами своего другого запроса автоматически какой либо функцией
типа
Код: Выделить всё
Select
v1 as колонка1
v2 as колонка2
v3 as колонка3
v4 as колонка4
from lsdbo.....
если да - то надобность в параметрах внедренного запроса отпадает вообще
не знаю понятно ли объяснил....
ps
вопрос полностью пересекается с темой
http://www.lplm.ru/phpBB2/viewtopic.php?t=375&start=105 8я страница

Добавлено: 21 мар 2008, 12:55
Anderyt
хм...
с таким я не сталкивался..
у меня обычно только заполнение массивов на формах в действиях над переменными...
Код: Выделить всё
temp_str = f_EmbeddedSQLSelect
(this,
'
select link_id
from lsdbo.tree_link_view
where
link_type_id = 1
and
parent_id = :object_id
',
'object_id,number',
'Obj_id_array')
temp_str = string(f_RetrieveForm ( this , 'object_id' , ' Obj_id_Array ' ))
temp_str = f_FormDataToArray ( this , 'Obj_id_Array' )
таким образом, на текущей форме массив Obj_id_Array заполняется нужными элементами..
а с внедренными селектом я не работал еще...
Добавлено: 21 мар 2008, 12:58
Александр
ладно - это все понятно - внедренный Select ни при чем - ты точно также можешь поместить в свой вызов ФИКТИФНЫЙ ПУСТОЙ Selеct (главное условие наличие имени колонки).
Код: Выделить всё
temp_str = f_EmbeddedSQLSelect (this,'select 0 as link_id','','Obj_id_array')
Просто мне как всегда нужно только то что нужно мне - любыми средствами документированными и не очень
пойду в техподдержку закажу новый функционал

Добавлено: 21 мар 2008, 14:15
Александр
оказывается все можно сделать (техподдержка) - т.е. перезаписать существующий массив другим запросом - главное условие чтобы СТРУКТУРА массива осталась без изменения
берем f_EmbeddedSQLSelect и перезаписываем существующий многомерный массив тысячу раз совершенно разными запросами - главное чтобы возвращаемые данные разлетелись по 'своим' колонкам
а главное что - что мы с видами выиграли
время
раньше массив наполнялся (без видов) 6 секунд а теперь 2
4 секунды выигрыш и два дня разборок - но результат достойный пятницы - неделя кончилась удачно
ps
Код: Выделить всё
f_EmbeddedSQLSelect ( this , 'Select pObjDescr as pObjDescr, pAtrVendor as pAtrVendor, ~'0~' as pBtAdd, pObjID as pObjID from lsdbo.ric_'+ vProductTypeCurrent +'_view' , '' , 'pFormPrice' )
pps
для Андрея Select * можно потому что я просто беру все данные из вида а в виде колонки называются также как и переменные (массивы) на форме

Добавлено: 21 мар 2008, 15:43
Александр
да кстати, совсем забыл, Андрей - спасибо за виды и за консультацию!