Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.10.2010, 15:01
gjtrd gjtrd вне форума
Прохожий
 
Регистрация: 29.10.2010
Сообщения: 14
Репутация: 10
Вопрос Помогите разобраться

Добрый вечер. У меня есть база в аксессе. Таблицы: Dom, Kvart, Zilci. Подключена к делфи ч-з АДОконект. Подскажите, через какие компоненты лучше отображать данные, чтобы была возможность организовать поиск по полям из разных таблиц. Например, в Edit1 ввели "Вася". Мне нужно Чтоб отобразился только тот дом, в котором живет вася, только та квартира, в которой он живет, и из всех жильцов этой квартиры только один Вася. Или, если в эдит ввели 2-ой Донской, должны отобразиться домв с двнным адресом и все квартиры в них и все жильцы квартир.

Сейчас у меня все НЕ работает следующим образом: На форме три ДБГрида, в датамодуле:
Dom --> ADOTable1 --->DataSource1 --> DBGrid1 / Kvart ---> ADOTable2 ---> DataSource2 ---> DBGrid2 / Zilci ---> ADOQuery1 ---> DataSource3 ---> DBGrid3. В DataSource Query указан DataSource2.
В на в кладке Diagramm датамодуля выставлены связи. Dom - главная таблица, Kvart - зависимая. Zilci зависит от Kvart.
Проблема в следующем: пишу запрос
fDM.adoquery1.sql.add('Select Distinct Z.*');
fDM.adoquery1.sql.add('From Zilci as z, Kvart AS K, Dom AS D');
fDM.adoquery1.sql.add('where ((Z.FIOHost LIKE '+#39+'%'+edit1.text+'%'+#39') OR (D.GOD LIKE '+#39+'%'+edit1.text+'%'+#39') OR (D.Comment LIKE '+#39+'%'+edit1.text+'%'+#39') OR (Z.Pasport LIKE '+#39+'%'+edit1.text+'%'+#39')) AND Z.Flat=K.Flat AND Z.Address=K.Address And K.Address=D.Address');
С нижней таблицей все отлично, из всех жильцов отображается только Вася. Но, в других таблицах отображаются все дома и все квартиры. Решил проблему, заменив тейбл1 и тейбл2 на два квери и в каждый кидал одинаковый запрос, меняя только имя таблицы в селекте, но этот способ, судя по-всему не самый правильный. В общем, у меня полнейшая каша в голове с компонентами.

P.S. 1.Засунуть все таблицы в один грид не вариант - он получится километровой длины.
2.В поиске участвуют также memo поля.

Последний раз редактировалось gjtrd, 29.10.2010 в 15:27.
Ответить с цитированием
  #2  
Старый 29.10.2010, 21:57
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

А ты соединил таблицы
Дом с Квартирой
Квартиру с жильцами???
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #3  
Старый 29.10.2010, 22:22
gjtrd gjtrd вне форума
Прохожий
 
Регистрация: 29.10.2010
Сообщения: 14
Репутация: 10
По умолчанию

В датамодуле, на вкладке Diagramm выставлены связи. Dom - главная таблица, Kvart - зависимая. Zilci зависит от Kvart. В аксесе связи не выставлял. Это может помочь?
Ответить с цитированием
  #4  
Старый 30.10.2010, 00:28
birrrma birrrma вне форума
Прохожий
 
Регистрация: 29.10.2010
Сообщения: 9
Репутация: 10
По умолчанию

на сколько я понимаю Вам надо построить "представление" или "вьюшку" в Аксцессе (или в самом делфи сделать объединяющий запрос) где нужно связать таблицы домов квартир и жильцов в один запрос что-то вроде
... select d.Dom_Name, k.Kvart_Name, z.Zilets from
Zilets z left outer join kvart on z.kvart_id = k.kvart_Id
left outer join Dom on z.Dom_id = d.Dom_Id
where ... ну и даже условие с Вашими условиями "LIKE"

Последний раз редактировалось birrrma, 30.10.2010 в 00:48.
Ответить с цитированием
  #5  
Старый 30.10.2010, 01:13
gjtrd gjtrd вне форума
Прохожий
 
Регистрация: 29.10.2010
Сообщения: 14
Репутация: 10
По умолчанию

Я не силен в терминологии. Если "построить представление или вьюшку" означает обозначить связи между таблицами, то я это сделал средствами делфи. Объединяющий запрос тоже построил: AND Z.Flat=K.Flat AND Z.Address=K.Address And K.Address=D.Address');
Ответить с цитированием
  #6  
Старый 31.10.2010, 21:01
gjtrd gjtrd вне форума
Прохожий
 
Регистрация: 29.10.2010
Сообщения: 14
Репутация: 10
По умолчанию

Мм... А апать темы тут можно?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025