Vadim писал(а):3. Метод ExecSQL используется только тогда, когда Вам не нужно получать данные. Во всех других случаях этот метод совершенно бессмысленен.
Алгоритм действий:
1. Получить из таблицы TKategorii значение IDKATEGOR текущей строки.
2. Подставить это значение в запрос к Lekarstva в секцию WHERE, не забыв преобразовать в строковый тип (т.к. запрос - это строка).
3. Открыть запрос методом Open.
Всё.
- Код: Выделить всё
QLek.Close;
QLek.SQL.Clear;
QLek.SQL.Add('select * from Lekarstva where IDKATEGOR='+QKAT.FieldByName('IDKATEGOR').AsString);
QLek.Open;
100%-но работающий код. И единственный, который нужен.
Ну, у меня в принципе, было то же самое. Разве что метод ExecSQL был лишним, хотя и с ним работает.
Проблема решилась следующим образом:
1. Из-за собственной невнимательности.
Дело в том, что базу я брал готовую, правда Paradox-овскую (чтобы ее перевести в SQLite, пришлось написать отдельную процедуру).
Оказалось, в таблице лекарств в категории IDKATEGOR=1 не было лекарств. При открытии таблиц, указатель ставится на первую запись, и естественно в DBGrid2 ничего не отображалось. После добавления нужных данных в таблицу, в DBGrid2 они отобразились. Однако, если в первом гриде выбрать другую категории, во втором гриде ничего не менялось.
2. Поэтому для первого грида необходимо ставить обработчик OnCellClick в котором надо повторить запрос.