Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
во всплывающем списке (popup) или в выпадающем... 08.03.11 15:47 Число просмотров: 1242
Автор: Den <Denis> Статус: The Elderman Отредактировано 08.03.11 15:54 Количество правок: 2
|
> Есть таблица параметров: params (id, title); есть таблица > значений, допустимых для этих параметров: values (id, > title); есть таблица соответствия значений параметрам: > params_values (param, value); есть таблица list (id, param, > value), в которой хранится список параметров и их значений. > Параметры и типы выбираются с помощью всплывающего списка. > > Необходимо сделать так, чтобы во всплывающем списке > отображались только те значения, которые соответствуют > выбранному параметру. Ранее я уже задавал подобный вопрос, > но поторопился закрыть тему, не расставив все точки над i.
во всплывающем списке (popup) или в выпадающем (combobox)???
> Мне частично удалось решить эту задачу: я создал форму и на > событие AfterUpdate списка params поставил Requery для > values. В списке values прописан следующий запрос: > > > SELECT id, title FROM values WHERE id in
> (SELECT value FROM params_values WHERE
> param=param.value);
> ---
> Жирным выделена переменная, которая подставляется из > всплывающего списка params.
неоптимальный запрос. сделай так:
SELECT values.id, values.title
FROM params_values
INNER JOIN values
ON values.id = params_values.value
WHERE params_values.id = Me.cmboxParam_ID.Value ---
где Me - ссылка на текущую форму; cmboxParam_ID - поле с выпадающим списком в форме Me.
У тебя неописательные имена полей в таблице params_values, может поэтому ты сам часто путаешься. Если поле предназначено для хранения идентификатора значения, то так и называй - value_id, а не просто value.
> Проблема в следующем. Если в таблице list есть только одна > запись, то всё работает как часы, но если добавляются ещё > записи, то начинается такая следующая неприятная вещь. В > первой строке я задаю параметр и значение. Во второй, я > задаю новый параметр.... И как только я делаю это (как > только сработает AfterUpdate и, соответственно Requery), то > значение из первой строки исчезает, т.к. уже не > соответствует текущей выборке. Но исчезает оно только > визуально, - оно не отображается только из-за > несоответствия критериям текущей выборки, но в таблице > params_values соответствующая запись остаётся.
Ты используешь ленточную форму в которой у тебя поля с выпадающим списком??? В ленточных формах используется многократно повторяющаяся одна и таже форма, потому у тебя и возникает такая "неприятная вещь".
Есть три варианта обхода этой проблемы:
1. Для выборки DropDownList не задавать ограничений до момента события выпадания списка, а перед выпадением списка уточнять запрос.
2. Использовать ленточную форму только для просмотра и/или редактирования полей, значения которых не зависит от других значений. Например, ленточную форму можно использовать только для чтения, а при двойном щелчке по записи открывать одиночную форму для редактирования выбранной записи.
3. Частный случай, который далеко не всегда удается использовать "в лоб" - подформы (вложенные формы).
> Такой вопрос. Можно ли сделать так, чтобы последствия > Requery затрагивали только текущую запись таблицы, а все > остальные записи оставляли не тронутыми?
можно. решения смотри выше.
P.S. Для изучения Access'а лучше всего использовать Access '97, т.к. в нем самый лучший (хоть и устаревший) файл помощи + база решений, в которой можно почерпнуть интересные решения.
|
|
|