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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Оставь "парам" как есть в запросе, и тогда аксесс будет спрашивать "введите парам" при открытии запроса. Или мути Схему данных. Или форму с мастер-подчинёнными таблицами. 01.11.09 20:06  Число просмотров: 2968
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
<programming>
Можно ли сделать автоматический фильтр в таблице MS Access? 31.10.09 12:42  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 31.10.09 12:44  Количество правок: 1
<"чистая" ссылка>
Есть вот такая простенькая БД (в круглых скобках указаны поля, из которых состоит таблица, а квадратными скобками задаётся таблица используемая для подстановки значений):
abstracts (id, name, descr)
abstracts_tree(id, parent[abstracts], node[abstracts])
objects(id, name, descry, abstract[abstracts])
objects_tree(id, parent[objecrs], node[objects])

Таблицы abstracts и abstracts_tree описывают типы объектов и иерархию этих типов.
Таблицы objects и objects_tree описывают типизированные значения и иерархию этих типизированных значений.

В MS Access есть возможность использовать одну таблицу для подстановки значению в другую (мастер подстановок). Также там есть возможность использовать для подстановки не всю таблицу, а делать выборку при помощи инструкций SQL.

Например, мне нужно, чтобы в таблице objects_tree в поле parent отображались только такие значения, типы которых не атомарны (т.е. состоят из каких-то других типов). Для того, чтобы этого добиться я для поля parent в настройках подстановки в качестве источника строк задаю такой запрос:
SELECT objects.id, objects.name
FROM objects
WHERE
(
SELECT COUNT(abstracts_tree.parent)
FROM abstracts_tree
WHERE abstracts_tree.parent = objects.abstract
) <> 0;

---
С этим запросом проблем нет – всё работает. Но вот для поля node мне нужно в источник строк засунуть запрос с параметром (чтобы в списке открывались только те значения, которые могут являться составными частями поля parent расположенного на этой же строке, т.е. мне надо, чтобы при изменении значения в поле parent менялся список подстановок для поля node).

Сам запрос с параметром я написал, вот он:
SELECT abstracts_tree.id, abstracts_tree.node, objects.id, objects.name, objects.abstract
FROM abstracts_tree, objects
WHERE abstracts_tree.parent=параметр And abstracts_tree.node=objects.abstract;

---
Вопрос: можно ли как-то сказать Access'у, чтобы он вместо строки «параметр» подставлял значение из соседнего поля «parent».

PS. Конечно, можно сделать свою форму ввода – там это делается без проблем, но хотелось бы подружить данный запрос с таблицей без использования дополнительных наворотов.
Нет, нельзя. Ручками в VBA придется покодить. [upd] 09.11.09 18:51  
Автор: Den <Denis> Статус: The Elderman
Отредактировано 09.11.09 19:22  Количество правок: 2
<"чистая" ссылка>
Так или иначе нужно вызывать метод requery для объекта подстановки.

[upd]
Не уверен, можно ли сделать такой фокус в таблице, но если на основе таблицы создать обычную или ленточную форму, повесить в метод AfterUpdate выпадающего списка
forms("frmObjectsTree").cmboxParent
вызов метода me.cmboxNode.requery
В запросе, в качестве "параметр" можно указать forms("form_name").object.value
inner join пробовал? 31.10.09 16:34  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 31.10.09 16:41  Количество правок: 1
<"чистая" ссылка>
> Сам запрос с параметром я написал, вот он:
>
> SELECT abstracts_tree.id, abstracts_tree.node, objects.id,
> objects.name, objects.abstract
> FROM abstracts_tree, objects
> WHERE abstracts_tree.parent=параметр And
> abstracts_tree.node=objects.abstract;
> 

---
> Вопрос: можно ли как-то сказать Access'у, чтобы он вместо
> строки «параметр» подставлял значение из соседнего поля
> «parent».
Типа так:

SELECT
 abstracts_tree.id,
 abstracts_tree.node,
 objects.id,
 objects.name,
 objects.abstract
FROM objects
INNER JOIN abstracts_tree
  ON
    (abstracts_tree.parent=objects.parent)
      AND
    (abstracts_tree.node=objects.abstract);

---
А потом прикрутить отношение мастер-подчинённая к двум таблицам на форме.
Так ведь этот запрос делает то же, что и мой. Или я не прав?... 31.10.09 17:13  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
Так ведь этот запрос делает то же, что и мой. Или я не прав? А что, использование INNER JOIN более быстро работает? Или зачем ты его мне предложил?

И, опять же, надо с формой дополнительной заморачиваться. Без этого никак?
Тогда я не понял, что значит "Автоматический фильтр" 31.10.09 17:43  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Ты хочешь, чтобы тебе выдавались строки, являюшиеся объединением полей из двух таблиц, сгрупированные по полю parent?
Мой запрос создаёт такую таблицу.
При этом можешь разместить на форме мастер-таблицу, где можно выбирать запись, где одним из полей является поле [parent], и подчинённую таблицу с моим запросом, где записи фильтруются тоже по полю [parent].
Также можно эти же отношения заводить модифицируя Схему данных.
Добавляешь там запросы, создаёшь отношения между ними по интересующим тебя полям, открываешь мастер-запрос, там эдакий плюсег появляется, который можно раскрыть и увидеть подчинённые данные.
А ты заметил, что у меня стоит не строка 31.10.09 18:06  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
А ты заметил, что у меня стоит не строка
"abstracts_tree.parent=objects.parent", а строка
"abstracts_tree.parent=параметр"?
пля. Откуда берётся параметр? Вручную вводится? ;) 31.10.09 18:23  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
В данном случае да, если использовать форму, то можно вместо... 01.11.09 03:25  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
В данном случае да, если использовать форму, то можно вместо него прописать путь к какому-нибудь контролу на форме, например, к всплывающему списку, тогда после изменения текущего значения в этом списке будет меняться и "дочерний" список.

Я хочу сделать то же самое, но без формы. Можно аксесу каким-либо образом, сказать, что этот параметр надо брать из соседнего поля таблицы?
Оставь "парам" как есть в запросе, и тогда аксесс будет спрашивать "введите парам" при открытии запроса. Или мути Схему данных. Или форму с мастер-подчинёнными таблицами. 01.11.09 20:06  
Автор: HandleX <Александр М.> Статус: The Elderman
<"чистая" ссылка>
Дык, на VB-то SQL-запрос можно сформировать конкатенацией строк... 31.10.09 13:27  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Или, ты хочешь все сделать "чайничным" способом - без скриптинга? Тады - ой!
"Навыками скриптинга" владею, но хотелось бы обойтись без них. 31.10.09 13:47  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
А не выйдет! Динамические запросы формируются тока через скрипты. 01.11.09 06:47  
Автор: Zef <Alloo Zef> Статус: Elderman
Отредактировано 01.11.09 06:49  Количество правок: 1
<"чистая" ссылка>
Ну и в ручную, через связанную с фильтром форму ввода. А так, чтобы фильтр формировался автоматически на основе когда-то в другом месте введенных полей в некой таблице - тока через скрипт.
1




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


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