Форум по 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
По умолчанию

Мм... А апать темы тут можно?
Ответить с цитированием
  #7  
Старый 01.11.2010, 17:28
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание

Выложи сюда свою программу - допишу отдам...Просто может быть ты что то не правильно сделала - когда базу на аксезе создавал
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #8  
Старый 02.11.2010, 12:18
gjtrd gjtrd вне форума
Прохожий
 
Регистрация: 29.10.2010
Сообщения: 14
Репутация: 10
По умолчанию

Не думаю, что проблема в аксесе. Напиши меил - кину прогу.

Попробую еще раз объяснить что мне нужно. Видимо получилось непонятно.

1. До применения поиска все работает отлично. При нажатии на одну из квартир показываются только ее жильцы, при нажатии на какой-нибудь дом показываются только квартиры из этого дома. То есть со связью таблиц проблем нет.

2. Начинаю делать поиск по полям Dom.God, Dom.Comment, Zilci.FIOHost, Zilci.Pasport. В Квери, к которому подключены таблица Dom и первый ДБГрид, передаю запрос.
fDM.adoquery3.sql.add('Select Distinct D.*');
fDM.adoquery3.sql.add('From Zilci as z, Kvart as K, Dom AS D');
fDM.adoquery3.sql.add('where (Z.Flat=K.Flat) and (Z.Address=K.Address) and (K.Address=D.Address) and ((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'))');
В Таблице DOM ключевое поле Address
В Таблице Kvart ключевые поля Address и Flat
В Таблице Zilci ключевые поля Address, Flat, ID_Zilci

В итоге, ввожу я в Эдит1 фамилию жильца. Этот запрос, ясное дело, выводит мне в верхнем гриде дом, в котором живет этот жилец.

ПЕРВЫЙ ВОПРОС:
Как сделать так, чтоб в первом гриде выводился только тот дом, в котором живет жилец, во втором гриде только та квартира, в которой живет жилец, в третьем только нужный жилец.

ВТОРОЙ ВОПРОС:
насколько неадекватен мой способ решения проблемы. Я в обработчике кнопки пишу следующий код:
fDM.adoquery3.active := False;
fDM.adoquery1.active := False;
fDM.adoquery2.active := False;
fDM.adoquery3.sql.clear;
fDM.adoquery1.sql.clear;
fDM.adoquery2.sql.clear;
fDM.adoquery3.sql.add('Select Distinct D.*');
fDM.adoquery3.sql.add('From Zilci as z, Kvart as K, Dom AS D');
fDM.adoquery3.sql.add('where (Z.Flat=K.Flat) and (Z.Address=K.Address) and (K.Address=D.Address) and ((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'))');
fDM.ADOQuery1.sql.Add('Select Distinct K.*');
fDM.adoquery1.sql.add('From Zilci as z, Kvart as K, Dom AS D');
fDM.adoquery1.sql.add('where (Z.Flat=K.Flat) and (Z.Address=K.Address) and (K.Address=D.Address) and ((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'))');
fDM.ADOQuery2.sql.Add('Select Distinct Z.*');
fDM.adoquery2.sql.add('From Zilci as z, Kvart as K, Dom AS D');
fDM.adoquery2.sql.add('where (Z.Flat=K.Flat) and (Z.Address=K.Address) and (K.Address=D.Address) and ((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'))');
fDM.adoquery2.active := true;
fDM.adoquery1.active := true;
fDM.adoquery3.active := true;
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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