информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаАтака на InternetСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Спасибо за беспокойство! 12.03.11 14:50  Число просмотров: 995
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
<programming>
[Access] Можно ли сделать автоматический фильтр в таблице MS Access? Дубль 2. 08.03.11 12:01  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 08.03.11 12:04  Количество правок: 6
<"чистая" ссылка> <обсуждение закрыто>
Есть таблица параметров: 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 затрагивали только текущую запись таблицы, а все остальные записи оставляли не тронутыми?
во всплывающем списке (popup) или в выпадающем... 08.03.11 15:47  
Автор: 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, т.к. в нем самый лучший (хоть и устаревший) файл помощи + база решений, в которой можно почерпнуть интересные решения.
Спасибо за оптимизацию. 09.03.11 10:23  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Спасибо за оптимизацию.

Правильно ли я понимаю, что в 1-м случае остальные данные также будут скрыты, но только на время того, пока действует уточнённый запрос? Если да, то как-то это не очень красиво.

Второй вариант понятен, но он довольно громоздкий – будет от пользователя требовать много лишних действий.

Насколько я понял, в третьем варианте вы предлагаете для param сделать одну форму, а для value – другую, подчинённую ей. Такое решение будет не наглядным – для того чтобы узнать значения параметра, придётся осуществлять дополнительные действия.

Я использую не ленточные формы, а табличные и подчинённые. Как это выглядит, можно посмотреть на скрине.
Можно попытаться найти подходящий бесплатный OCX, в котором... 09.03.11 14:40  
Автор: Den <Denis> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> Спасибо за оптимизацию.
>
> Правильно ли я понимаю, что в 1-м случае остальные данные
> также будут скрыты, но только на время того, пока действует
> уточнённый запрос? Если да, то как-то это не очень красиво.
>
> Второй вариант понятен, но он довольно громоздкий – будет
> от пользователя требовать много лишних действий.

Можно попытаться найти подходящий бесплатный OCX, в котором реализованы все необходимые возможности.
Средствами Access практически невозможно сделать гибкую и удобную обвязку БД, к которым привык пользователь. Все более-менее сложные вещи приходится делать через одно место.
Access хорош для создания отчетов.

Выбор варианта решения за тобой. Других идей нет.
Спасибо за беспокойство! 12.03.11 14:50  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach