|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
Есть два блока. Блок1 - глава семьи, блок2-состав семьи. Связаны :блок1.id=:блок2.parent_id. Задача организовать поиск по ФИО в обеих таблицах. На форме присутствуют поля ФИО блока1 и поля ФИО блока2. Для поиска используются поля блока1. Например нужно найти лицо ИВАНОВА ИВАНА ИВАНОВИЧА, т.е. найти его в главах семей и найти главу семьи в блоке1, если он нашелся в таблице состав семьи (блок2). Надеюсь понятно изложил. Как реализовать такое? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2012, 12:29 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
Тупо, навскидку, нужно просто установить соответствующее условие отбора на блок1: fio = :fio or exists (select что там у вас ... where fio = :fio) Вы хоть как-то пытались решить эту задачу или сразу на форум писать побежали? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2012, 13:22 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
-=APS=-, конечно я пытался. И тырнэт перекапывал, и этот форум весь просмотрел. Пробовал в DEFAULT_WHERE блока1 добавлять условие, но т.к. формс сам форматирует where, то получается следующее. Вообще нужно добиться конечного вида запроса как: Код: plsql 1. 2. 3. 4. 5. 6.
как такого запроса добиться я не могу понять. Если DEFAULT_WHERE блока1 заполнен условием, то формс его ставит сразу после WHERE, а потом добавляет AND (поле = значение) AND (поле = значение) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2012, 13:52 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
А вы пытаетесь прицепить функционал поиска по detail-строкам зависимого блока к СТАНДАРТНОМУ формсовскому функционалу Enter-Query/Execute Query? Ммм... Как-то не очень идеологически, по-моему. Это обязательное требование? Почему нельзя, например, сделать отдельный блок для ввода требуемых реквизитов поиска с кнопкой "Искать", по нажатию на которую будет происходить фильтрация/перезапрос данных в ваш блок1? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2012, 14:37 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
В общем-то можно и отдельный блок сделать для поиска, но опять не понятно как сформировать такой запрос. Что там в триггере писать? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2012, 14:51 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
Ну, раз можно, тогда сделайте блок, например, CRITERIA с айтемами FAM, IMJ и кнопкой "Искать". В блоке для TABLE1 в условии WHERE укажите ваше условие, которое вы уже писали выше: Код: plsql 1.
В триггер на кнопку: go_block(table1), execute_query. - Ну, способ упрощенный, конечно... Но основную функцию (отображать данные по указанным условиям) выполнит. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2012, 16:01 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
Как вариант пойдет. Спасибо за помощь! В понедельник попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2012, 16:25 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
Есть еще идеи? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2012, 13:37 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
revenko@@, in pre_query trigger of parent block set_block_property('PARENTBLOCK','DEFAULT_WHERE', ' table1.fam=||''''||:FIND.LAST_NAME||''''|| OR existst (select 1 from table2 where table2.parent_id=table1.id and table2.fam=''''||:FIND.LAST_NAME ||''''||')'; ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2012, 20:19 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
guralrevenko@@, in pre_query trigger of parent block set_block_property('PARENTBLOCK','DEFAULT_WHERE', ' table1.fam=||''''||:FIND.LAST_NAME||''''|| OR existst (select 1 from table2 where table2.parent_id=table1.id and table2.fam=''''||:FIND.LAST_NAME ||''''||')'; кончно default_where без ковычек... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2012, 20:22 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
gural, А если пользователь по другим реквизитам будет искать? Все рас сыпаться. Так я пробовал уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2012, 13:30 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
revenko@@gural, А если пользователь по другим реквизитам будет искать? Все рассыпется. Так я пробовал уже. К тому же формс в запрос default_where вставит и приплюсует and table1.fam='ИВАНОВ'. Можно попробовать проверять поля и вставлять в default_where только запрашиваемые и перед выполнением их очищать, чтобы формс их не добавлял к запросу. Ну скорее бы понедельник. Проверить все это надо. Обязательно отпишу результат. Спасибо всем за помощь, за идеи. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2012, 14:42 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
Вот что получилось. На триггер PRE-QUERY повесил следующий код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
И в итоге получаем нужный запрос вида: SELECT * FROM TABLE1 WHERE (TABLE1.FAM = 'ИВАНОВ' AND TABLE1.IMJ = 'ИВАН') OR EXISTS (SELECT 'X' FROM TABLE2 S WHERE S.PARENT_NSYST = TABLE1.NSYST AND S.FAM = 'ИВАНОВ' AND S.IMJ = 'ИВАН') ORDER BY NSYST Если не сделать COPY(NULL, 'TABLE1.FAM'); COPY(NULL, 'TABLE1.IMJ'); COPY(NULL, 'TABLE1.OTCH'); то формс, конечно же, добавляет критерии в конец запроса и получается запрос вида: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
а это уже не то. Ничего не находится. Короче работает! Еще раз благодарю за сотрудничество, товарищи! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2012, 06:56 |
|
Master-Detail запрос в обе таблицы
|
|||
---|---|---|---|
#18+
[quot revenko@@] Все просто: 1. Не надо устанавливать связь между блоками 2. Блок1 триггер when new record instance go_block(блок2); clear_block; execute_query; go_block(блок1) Ходим (ищем) по блок1 - блок2 отражает состав семьи Ищем по ФИО блока2 - меняем defaul_where блока2 и execute_query При возврате в блок1 восстанавливаем defaul_where блока2 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2012, 10:18 |
|
|
start [/forum/topic.php?fid=51&msg=37669149&tid=1878532]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 171ms |
0 / 0 |