Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 08:21   #1
astra-48
Новичок
Джуниор
 
Регистрация: 01.03.2010
Сообщений: 2
По умолчанию SQL-запрос (связанные таблицы)

Здравствуйте, не могу разобраться с запросом.
Есть база Access c тремя таблицами.
Поля Tab1: id_1, name_1
Поля Tab2: id_2, id_1, id_3, name_2
Поля Tab3: id_3, name_3.
Связи: Tab3.id_3= Tab2.id_3 (один ко многим), Tab1.id_1= Tab2.id_1 (один ко многим).

ADOQuery1:
Select Tab1.ID_1, Tab1. name_1
from Tab1

ADOQuery2:
Select
Tab2.ID_2, Tab2.ID_1, Tab2.ID_3, Tab2. name_2,
Tab3. id_3, Tab3. name_3
FROM Tab3, Tab2
where Tab3.ID_3 = Tab2.ID_3

В DBGrid1 - ADOQuery1 (Tab1), в DBGrid2 – ADOQuery2 (Tab2 и Tab3).
До этого момента все понятно.
Нужно сделать так, чтобы если кликаешь в строчку DBGrid1 то, в DBGrid2 должны отображаться строки соответствующие id_1.
То есть, если кликаешь в DBGrid1 где ID_1=6 (Tab1.ID_1=6), то в DBGrid2 должны отображаться только строки ID_1=6 (Tab2.ID_1=6).
astra-48 вне форума Ответить с цитированием
Старый 01.03.2010, 09:10   #2
GX_h10
Пользователь
 
Регистрация: 20.04.2009
Сообщений: 28
По умолчанию

Что-то типа этого (в силу того, что вы не представили исходный код):

Код:
procedure TForm.ADOQuery1AfterScroll(DataSet: TDataSet);
var 
  sql:string;
begin
  try
    if ADOQuery1.FieldByName('ID_1').AsString = '' then
      sql := 'ID_1 = 0'
    else
      sql := 'ID_1 = '+QuotedStr(ADOQuery1.FieldByName('ID_1').AsString);
    ADOQuery2.Filter := '';
    ADOQuery2.Filter := sql;
    ADOQuery2.Filtered := True;
  except
    on E: Exception do
    AppLog(E.Message)
  end;
end;
GX_h10 вне форума Ответить с цитированием
Старый 02.03.2010, 22:58   #3
astra-48
Новичок
Джуниор
 
Регистрация: 01.03.2010
Сообщений: 2
По умолчанию

А что такое AppLog? Выдает ошибку Undeclared identifier: 'AppLog'
astra-48 вне форума Ответить с цитированием
Старый 03.03.2010, 01:44   #4
Dmitriy.G
Пользователь
 
Регистрация: 27.02.2010
Сообщений: 26
По умолчанию

Попробуй для ADOQuery которая данные посылает в DBGrid1 прописать такую процедуру на событие AfterScroll:

procedure TForm1.ADOQuery1AfterScroll(DataSet : TDataSet);
var ID1:string;
begin
ID1:=ADOQuery1.fieldbyname('ID_1'). AsString; //запоминаем значение поля ID_1 текущей строки
ADOQuery2.Filter:='ID_1='+ID1; //устанавливаем параметр фильтра
ADOQuery2.Filtered:=true; //Включаем фильтр
end;

У меня такой способ работал как часики.
Удачи!
Dmitriy.G вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление в связанные таблицы, ШИФР->товар1, товар2, ISSA БД в Delphi 1 21.06.2008 21:33
Связанные таблицы в Аксессе mirawoo Microsoft Office Access 8 12.03.2008 00:13
SQL запрос сразу по двум столбцам одной таблицы Иван БД в Delphi 6 03.01.2008 14:36
Связанные таблицы - проблема при обращении к полю БД nataly_ukr БД в Delphi 7 13.11.2007 10:47
Добавление записей в связанные таблицы с помощью Навигатора ~MaGic~ БД в Delphi 2 09.07.2007 08:01