| 
| 
 | Вопрос # 6 538/ вопрос решён / | 
 |  Доброго времени суток, уважаемые эксперты!Подскажите, пожалуйста, как реализовать запрос в БД, чтобы данные фильтровались по текущей строке.
 
 Например:
 Есть 2 таблицы - марка и модель
 Таблица "марка" содержит код и марку автомобиля:
 1 - ВАЗ
 2 - Toyota
 и т.д.
 
 Таблица "модель" содержит код модели, код марки и модель
 1 - 1 - 2110
 2 - 1 - 2109
 3 - 2 - Rav 4
 4 - 2 - Corolla
 и т.д.
 
 В Delphi на форме имеются 2 DBGrid и 2 кнопки
 1 DBGrid отображает данные таблицы "марка"
 2 кнопки обеспечивают переход по строчкам в этом DBGrid
 
 Возможно ли сделать так, чтобы во втором DBGrid отображались только те модели, марка которых находится в текущей строке, т.е. при запуске текущей является первая строчка - "1 - ВАЗ", значит во 2 DBGrid отображаются только "1 - 1 - 2110" и "2 - 1 - 2109"
 при нажатии на кнопку, текущей становиться следующая строка "2 - Toyota", а значит отображаться во 2 DBGrid должны будут следующие строчки "3 - 2 - Rav 4" и "4 - 2 - Corolla"
 
 Может через какое-то событие это можно сделать?
 
 Сама БД сделана в MSSQL
 
|  |   Вопрос задала: Цирцея (статус: Посетитель)Вопрос отправлен: 3 июня 2014, 22:04
 Состояние вопроса: решён, ответов: 1.
 |  Ответ #1. Отвечает эксперт: ANBsoft Здравствуйте, Цирцея!DBGrid получает данные из DataSource, у которого есть событие OnDataChange.
 В этом событии для первого грида ставим переоткрытие второго запроса с фильтром по текущей марке.
 
|  | Ответ отправил: ANBsoft (статус: Студент)Время отправки: 3 июня 2014, 22:46
 Оценка за ответ: 5
 Комментарий к оценке: Спасибо за быстрый ответ и за пояснения =) |  
 Мини-форум вопросаВсего сообщений: 9; последнее сообщение — 4 июня 2014, 13:29; участников в обсуждении: 2. 
|   | Цирцея (статус: Посетитель), 3 июня 2014, 22:55 [#1]:ANBsoft, спасибо за ответ! 
 Расскажите пожалуйста поподробней о:
 "переоткрытие второго запроса с фильтром по текущей марке."
 В этом событии просто нужно прописать запрос и всё?
 Самый страшный вирус всегда сидит перед компьютером.  |  
|   | ANBsoft (статус: Студент), 3 июня 2014, 23:00 [#2]:я не работал с MSSQL, но принцип везде один. в этом событии прописываем
 Query2.Close;
 Query2.SQL[1]:='WHERE (Marka='+IntToStr(Query1.FieldByName('ID').AsInteger)+')';
 Query2.Open;
 Как-то так.
 При том что во втором Query примерно такой запрос:
 SELECT * FROM Model
 WHERE (Marka=1)
 |  
|   | ANBsoft (статус: Студент), 3 июня 2014, 23:05 [#3]:В принципе у наследников TDataSet есть свойство DataSource, в котором можно указать родительский DataSet при изменении которого можно будет переоткрывать зависимый, но у разных компонентов он может вести себя немного по разному, поэтому я описао общий случай без него. |  
|   | Цирцея (статус: Посетитель), 3 июня 2014, 23:06 [#4]:ANBsoft, спасибо, попробую сделать   Самый страшный вирус всегда сидит перед компьютером.  |  
|   | Цирцея (статус: Посетитель), 3 июня 2014, 23:09 [#5]:Я через DataSource настраивала. Его подключала к ADOQuery, а ADOQuery к ADOConnection. ADODataSet не использовала
 Самый страшный вирус всегда сидит перед компьютером.  |  
|   | ANBsoft (статус: Студент), 3 июня 2014, 23:15 [#6]:все верно, любой Query (ADOQuery в том числе) является потомком TDataSet и наследует его свойства и методы |  
|   | Цирцея (статус: Посетитель), 4 июня 2014, 01:08 [#7]:Выдает мне ошибку, что поле найти не может Оо Завтра еще раз попробую сделать
 Самый страшный вирус всегда сидит перед компьютером.  |  
|   | ANBsoft (статус: Студент), 4 июня 2014, 01:12 [#8]:я условно написал поле "Marka", замените его на соответствующее поле из второй таблицы, которое определяет привязку модели к марке машины |  
|   | Цирцея (статус: Посетитель), 4 июня 2014, 13:29 [#9]:ANBsoft, да, подставила свое, спасибо. Пример ведь тоже привела условный.. в работе все намного сложнее и запутаннее =(
 Самый страшный вирус всегда сидит перед компьютером.  |  4 июня 2014, 15:03: Статус вопроса изменён на решённый (изменил автор вопроса — Цирцея) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |