|
Вопрос # 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: Статус вопроса изменён на решённый (изменил автор вопроса — Цирцея)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|