![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск в БД [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. И т.д. и т.п. Действительно, попробуй сформулировать вопрос более понятно.