Вложенный SQL запрос в линк форме

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

Вложенный SQL запрос в линк форме

Сообщение GTHack »

** преамбула -
хочу select * from ... where ... in (select ... from ...) в линке

** вступление -
необходимо в линк форму добавить поле которое в потоке в форму прототип не поступает, т.е. нужно самому в линке запросами по какому то входному параметру (который передается в прототип) спозиционироваться на нужной записи в нужной табличке и вывести рез-т.
задача как я думаю типичная и решенная многими здесь бывающими

** конкретика -
вот последовательность селектов которыми я в суппорте SQL получал необходимые мне записи

доступные параметры имеющиеся в потоке входящем в форму прототип это номер ДО и дата ДО, так что от них и пляшу (в tovn.pro это "основание" и "датаоснования")

в конце концов нужно получить выборку табличных частей всех накладных относящихся к этому ДО

select nrec from basedoc where ((датаоснования/==ddoc(noindex) and основание/==nodoc(noindex)));
дает 4000D82EA5603462h
select nrec from stepdoc where ((4000D82EA5603462h/==cbasedoc));
дает 400015F167097FEEh
select nrec from katsopr where ((400015F167097FEEh==cstepdoc));
дает несколько NRECO и по всем нужно пробежаться, вот один из них
select * from spsopr where ((4000B19E65184F8Ch==csopr));

каждый из них в SQL выполняется меньше секунды

************ ВОПРОС ****************** -
как это все в линк форме реализовать?

если делать несколько create view
1? то как выход одного view послать на вход другого (т.е. на один ДО один селект даст ссылки на накладные, а следующий селект должен по каждой накладной вывести материалы в ней содержащиеся)
2? если связывать в один view несколько таблиц то просто замучаешся ждать (таблицы очень большие) -> их объединененый вид будет делаться ужасно долго. (вышеописанными селектами очень быстренько)

подскажите плс мастера начинающему - как вы в таких ситуациях поступаете
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Re: Вложенный SQL запрос в линк форме

Сообщение Max_Fin »

Не морочь голову

select * from
basedoc, stepdoc, katsopr
where
((
датаоснования == basedoc.ddoc(noindex) and
основание == basedoc.nodoc(noindex) and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.csopr == spsopr.csopr
));
Жду выхода Вселенная 2.12!
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Re: Вложенный SQL запрос в линк форме

Сообщение Max_Fin »

Опс, забыл еще одну табличку прописать

select * from
basedoc, stepdoc, katsopr, spsopr
where
((
датаоснования == basedoc.ddoc(noindex) and
основание == basedoc.nodoc(noindex) and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.csopr == spsopr.csopr
));
Жду выхода Вселенная 2.12!
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Re: Вложенный SQL запрос в линк форме

Сообщение Max_Fin »

Еще раз опс, видать день не мой сегодня
select * from
basedoc, stepdoc, katsopr, spsopr
where
((
датаоснования == basedoc.ddoc(noindex) and
основание == basedoc.nodoc(noindex) and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.nrec == spsopr.csopr
));
Жду выхода Вселенная 2.12!
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

Re: Вложенный SQL запрос в линк форме

Сообщение GTHack »

такой запрос 100 лет будет крутиться

не подходит

я вот забыл написать что эту всю канетель я могу конечно на випе написать, но незнаю как из випа возвратить полученные данные форме то
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
GTHack
Местный житель
Сообщения: 517
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск Новосибирск
Контактная информация:

Re: Вложенный SQL запрос в линк форме

Сообщение GTHack »

во блин - Макс - прошу прощенья,
щас запустил - все нормал прошло (6 сек)

я прото раньше запускал его и у меня sql повис нафиг

я думал это он от напряги повис, а на самом деле просто так :)

ну это конечно решение - спасибо
но вопросы остались
т.е. как передавать данные из одного view в другой и как из ВИПа передать выборку форме
[url=http://blog.gtalex.ru]Блог GTAlex[/url]
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Re: Вложенный SQL запрос в линк форме

Сообщение Max_Fin »

1) как передать данные из одного view в другой не вопрос объяви в одном переменную(ые) и по ней позиционируй нужную(ые) тебе таблу(ы)

2) обойтись без ВИПа можно, даже нужно. view объявляй внутри твоей присоединенной формы, для того чтобы получить данные из него и воспользуйся в форме
.{table 'vView.BaseDoc'
.}
3) да и в данной конкретном случае тебе достаточно одного view
Жду выхода Вселенная 2.12!
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Вложенный SQL запрос в линк форме

Сообщение m0p3e »

C чего он будет 100 лет крутиться то? А индексы на что? :)
ecasoft
Местный житель
Сообщения: 645
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г.Королев МО ООО "Эффективная Комплексная Автоматизация- СОФТ"

Re: Вложенный SQL запрос в линк форме

Сообщение ecasoft »

Мне кажется просто задающий вопрос не в курсе еще, что Галактический SQL - не настоящий SQl и величина описания запроса (в одним или нескольких SQL) практически не играет роли и не оказыват на время никакого влияния. SQL запрос (как это в настоящем SQL) строится динамически уже в процессе обращения пользователя к значениям полей таблицы, указанной в запросе. Из описанного запроса выдеются как бы строки, относящиеся к данной таблице и все связанные с ними (стоящие слева от знака == ).

Извините, если не правильно чего понял.

Да, я думаю в потоке известен вид ДО (ну закупка там, продажа или еще что). Поэтому
логичнее, если больба за скорость
получить из потока вид ДО и сделать запрос
по индексу:

select * from
basedoc, stepdoc, katsopr, spsopr
where
((

вид_до == basedoc.viddoc and // NEW
датаоснования == basedoc.ddoc and
основание == basedoc.nodoc and
basedoc.nrec == stepdoc.cbasedoc and
stepdoc.nrec == katsopr.cstepdoc and
katsopr.nrec == spsopr.csopr
));

Так будет намного быстрее, если очень много ДО в базе так как без индекса перебирается вся база до совпадения!!!
Некоммерческое общение в форуме
Ответить