Текущий архив: 2004.11.14;
Скачать: CL | DM;
ВнизПоиск в БД Найти похожие ветки
← →
techgl (2004-10-16 21:15) [0]Есть такая проблема. 4 таблицы, связаны. Одна - родительская, остальные дочерние. При поиске задается таблица, поле по которому ищем, и собственно строка для поиска. Для родительской таблицы все, естественно, работает. Но для дочерних - нет, ибо там необходимо изменять порядок связывания. Как это реализовать? Поиск в одной таблице и при нахождении в этой таблице интересующей нас информации, в других таблицах по связям должна показыватся информация.
← →
Zacho © (2004-10-16 22:22) [1]Напиши свой вопрос более подробно и более понятно.
Например:
1. Какие компоненты доступа ?
2. Как собственно (код, запрос или просто объяснение словами) делается "поиск" ? И кстати, что такое для твоей задачи "поиск" ?
3. "Не работает" - как ? Приведи сообщение об ошибке, или описание того, чего ты хотел, и того, что получилось.
4. "4 таблицы, связаны" - как ?
5. Что такое "в других таблицах по связям должна показыватся информация" ???
6. Что такое "порядок связывания" применительно к "поиску" ???
7. Структура таблиц ?
8. И т.д. и т.п. Действительно, попробуй сформулировать вопрос более понятно.
← →
Anatoly Podgoretsky © (2004-10-17 12:50) [2]Важен только пункт 8, но поиск работает вне зависимости от вложенности
← →
techgl (2004-10-17 13:19) [3]Сейчас опишу подробнее. Я ошибся, указывая, что СУБД - InterBase. Вот полное описание.
Есть четыре таблицы(для удобства A, B, C, D). Одна - родительская(B), три другие связаны с ней по полям(допустим A_CODE, B_CODE, C_CODE). Использовал компонент из закладки BDE - TTable. Связал таблицы при проектировании. Компонент DBNavigator связан с таблицей B. Все работает, данные правильно отображаются во всех таблицах.
Встала проблема - поиск. Причем поиск должен осуществлятся по любой таблице(пользователь выбирает таблицу+поле по которому и будет осуществлен поиск). Допустим в таблице С мы нашли интересующую запись, соответственно в трех других должна отобразиться информация, соответствующая этому полю(за счет связывания).
В таблице B поиск осуществляется без проблем(что и понятно - родительская). Чтобы осуществить поиск в других, как я понял необходимо пересвязать таблицы. Как это сделать программно(на лету)? Если есть вообще другое решение - буду рад его выслушать.
← →
Deniz © (2004-10-18 07:10) [4]Не надо ничего пересвязывать.
Выполни запрос
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%"
дай полоьзователю всю эту ... пусть выберет нужную запись(если отобралось несколько записей) после выбора запоминай ПК всех таблиц, и переходи в мастере и во всех таблицах на эти ПК. Можно запомнить только мастера.
← →
Ильш (2004-10-18 07:36) [5]риторический вопрос:
почему некоторые так любят TTable ????
← →
Sergey13 © (2004-10-18 09:45) [6]2[3] techgl (17.10.04 13:19)
Ты странного хочешь, ИМХО. Поиск в подчиненной таблице осуществляется по ограниченному связью набору данных из этой таблицы. Если тебе нужен поиск по всей таблице, то наверное надо делать еще один несвязанный датасет на каждую подчиненную таблицу и искать по нему.
>Одна - родительская(B), три другие связаны с ней
Как поиск в одной подчиненной связан с другими подчиненными, если все они завязаны только на родительскую? Что то тут не так. Найди в несвязанном датасете нужную запись, узнай родительский идентификатор и спозиционируй родительскую таблицу - все остальное сработает само собой. Только что ты будешь делать при связи 1-много, т.е. когда в подчиненной несколько записей удовлетворяющих условию?
← →
techgl (2004-10-18 11:42) [7]2 Sergery13:
А мне тут SQL порекомендовали, с его помощью это реально осуществить? А то для каждой таблицы получается по два DataSet.
Просто хоть таблицы и всязаны, поиск должен идти по любой таблице, по всем ее значениям.
Программно поменять связи нельзя?
Тогда что делает вот этот код:
Table4.MasterSource:= DataSource2;
Table4.MasterField:= "A_CODE";
Разве он не связывает четвертую таблицу с первой по полю A_CODE?
← →
Sergey13 © (2004-10-18 12:28) [8]2[7] techgl (18.10.04 11:42)
>А мне тут SQL порекомендовали, с его помощью это реально осуществить?
Правильно посоветовали, решить можно, но схема решения будет очень похожа на [6].
>Тогда что делает вот этот код:
>Table4.MasterSource:= DataSource2;
>Table4.MasterField:= "A_CODE";
>Разве он не связывает четвертую таблицу с первой по полю A_CODE?
А зачем 4 ссылается на 1, если все (1,3 и 4) у тебя завязаны на 2 (судя по [3]). И что там у тебя первое и второе я не знаю. Вот я щас в столовой был, там понятно - суп первое, а котлета второе. А у тебя - не знаю. 8-)
Страницы: 1 вся ветка
Текущий архив: 2004.11.14;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.038 c