Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск в БД [D6, IB5.x]


techgl ©   (2004-10-16 21:15:00) 

Есть такая проблема. 4 таблицы, связаны. Одна - родительская, остальные дочерние. При поиске задается таблица, поле по которому ищем, и собственно строка для поиска. Для родительской таблицы все, естественно, работает. Но для дочерних - нет, ибо там необходимо изменять порядок связывания. Как это реализовать? Поиск в одной таблице и при нахождении в этой таблице интересующей нас информации, в других таблицах по связям должна показыватся информация.


Sergey13   (2004-10-18 12:28:00) [1]

2[7] techgl   (18.10.04 11:42)
>А мне тут SQL порекомендовали, с его помощью это реально осуществить?
Правильно посоветовали, решить можно, но схема решения будет очень похожа на [6].

>Тогда что делает вот этот код:
>Table4.MasterSource:= DataSource 2 ;
>Table4.MasterField:= 'A_CODE';
>Разве он не связывает четвертую таблицу с первой по полю A_CODE?
А зачем 4 ссылается на 1, если все (1,3 и 4) у тебя завязаны на 2 (судя по [3]). И что там у тебя первое и второе я не знаю. Вот я щас в столовой был, там понятно - суп первое, а котлета второе. А у тебя - не знаю. 8-)


techgl   (2004-10-18 11:42:00) [2]

2 Sergery13:
А мне тут SQL порекомендовали, с его помощью это реально осуществить? А то для каждой таблицы получается по два DataSet.
Просто хоть таблицы и всязаны, поиск должен идти по любой таблице, по всем ее значениям.
Программно поменять связи нельзя?
Тогда что делает вот этот код:
Table4.MasterSource:= DataSource2;
Table4.MasterField:= 'A_CODE';
Разве он не связывает четвертую таблицу с первой по полю A_CODE?


Sergey13   (2004-10-18 09:45:00) [3]

2[3] techgl   (17.10.04 13:19)
Ты странного хочешь, ИМХО. Поиск в подчиненной таблице осуществляется по ограниченному связью набору данных из этой таблицы. Если тебе нужен поиск по всей таблице, то наверное надо делать еще один несвязанный датасет на каждую подчиненную таблицу и искать по нему.

>Одна - родительская(B), три другие связаны с ней
Как поиск в одной подчиненной связан с другими подчиненными, если все они завязаны только на родительскую? Что то тут не так. Найди в несвязанном датасете нужную запись, узнай родительский идентификатор и спозиционируй родительскую таблицу - все остальное сработает само собой. Только что ты будешь делать при связи 1-много, т.е. когда в подчиненной несколько записей удовлетворяющих условию?


Ильш   (2004-10-18 07:36:00) [4]

риторический вопрос:
почему некоторые так любят TTable ????


Deniz   (2004-10-18 07:10:00) [5]

Не надо ничего пересвязывать.
Выполни запрос
select a.*, b.*, c.*, d.*
from b
 inner join a on (b.b_code = a.a_code)
 inner join c on (b.b_code = c.c_code)
 inner join d on (b.b_code = d.d_code)
where
 d.name like "%TEST%"
дай полоьзователю всю эту ... пусть выберет нужную запись(если отобралось несколько записей) после выбора запоминай ПК всех таблиц, и переходи в мастере и во всех таблицах на эти ПК. Можно запомнить только мастера.


techgl   (2004-10-17 13:19:00) [6]

Сейчас опишу подробнее. Я ошибся, указывая, что СУБД - InterBase. Вот полное описание.
Есть четыре таблицы(для удобства A, B, C, D). Одна - родительская(B), три другие связаны с ней по полям(допустим A_CODE, B_CODE, C_CODE). Использовал компонент из закладки BDE - TTable. Связал таблицы при проектировании. Компонент DBNavigator связан с таблицей B. Все работает, данные правильно отображаются во всех таблицах.
Встала проблема - поиск. Причем поиск должен осуществлятся по любой таблице(пользователь выбирает таблицу+поле по которому и будет осуществлен поиск). Допустим в таблице С мы нашли интересующую запись, соответственно в трех других должна отобразиться информация, соответствующая этому полю(за счет связывания).
В таблице B поиск осуществляется без проблем(что и понятно - родительская). Чтобы осуществить поиск в других, как я понял необходимо пересвязать таблицы. Как это сделать программно(на лету)? Если есть вообще другое решение - буду рад его выслушать.


Anatoly Podgoretsky   (2004-10-17 12:50:00) [7]

Важен только пункт 8, но поиск работает вне зависимости от вложенности


Zacho   (2004-10-16 22:22:00) [8]

Напиши свой вопрос более подробно и более понятно.
Например:
1. Какие компоненты доступа ?
2. Как собственно (код, запрос или просто объяснение словами) делается "поиск" ? И кстати, что такое для твоей задачи "поиск" ?
3. "Не работает" - как ? Приведи сообщение об ошибке, или описание того, чего ты хотел, и того, что получилось.
4. "4 таблицы, связаны" - как ?
5. Что такое "в других таблицах по связям должна показыватся информация" ???
6. Что такое "порядок связывания" применительно к "поиску" ???
7. Структура таблиц ?
8. И т.д. и т.п. Действительно, попробуй сформулировать вопрос более понятно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо