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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
"Навыками скриптинга" владею, но хотелось бы обойтись без них. 31.10.09 13:47  Число просмотров: 2845
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка>
<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