Есть таблица параметров: params (id, title); есть таблица значений, допустимых для этих параметров: values (id, title); есть таблица соответствия значений параметрам: params_values (param, value); есть таблица list (id, param, value), в которой хранится список параметров и их значений. Параметры и типы выбираются с помощью всплывающего списка.
Необходимо сделать так, чтобы во всплывающем списке отображались только те значения, которые соответствуют выбранному параметру. Ранее я уже задавал подобный вопрос, но поторопился закрыть тему, не расставив все точки над i.
Мне частично удалось решить эту задачу: я создал форму и на событие AfterUpdate списка params поставил Requery для values. В списке values прописан следующий запрос:
SELECT id, title FROM values WHERE id in
(SELECT value FROM params_values WHERE param=param.value);
---
Жирным выделена переменная, которая подставляется из всплывающего списка params.
Проблема в следующем. Если в таблице list есть только одна запись, то всё работает как часы, но если добавляются ещё записи, то начинается такая следующая неприятная вещь. В первой строке я задаю параметр и значение. Во второй, я задаю новый параметр.... И как только я делаю это (как только сработает AfterUpdate и, соответственно Requery), то значение из первой строки исчезает, т.к. уже не соответствует текущей выборке. Но исчезает оно только визуально, - оно не отображается только из-за несоответствия критериям текущей выборки, но в таблице params_values соответствующая запись остаётся.
Такой вопрос. Можно ли сделать так, чтобы последствия Requery затрагивали только текущую запись таблицы, а все остальные записи оставляли не тронутыми?
|