Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

Поиск в БД   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
14-1098537612
тихий вовочка
2004-10-23 17:20
2004.11.14
Маленький отчет о моей поездке в Индию


3-1097930940
TSL
2004-10-16 16:49
2004.11.14
Проблема с полем Image в mssql2000


1-1098889541
Tack
2004-10-27 19:05
2004.11.14
UNICODE и тип String в национальных версиях Win32


1-1099386098
Некто
2004-11-02 12:01
2004.11.14
За пределы формы


1-1098810059
aab
2004-10-26 21:00
2004.11.14
winapi owner, parent delphi-?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский