Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
Нет, нельзя. Ручками в VBA придется покодить. [upd] 09.11.09 18:51 Число просмотров: 3153
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 09.11.09 19:22 Количество правок: 2
|
Так или иначе нужно вызывать метод requery для объекта подстановки.
[upd]
Не уверен, можно ли сделать такой фокус в таблице, но если на основе таблицы создать обычную или ленточную форму, повесить в метод AfterUpdate выпадающего списка
forms("frmObjectsTree").cmboxParent
вызов метода me.cmboxNode.requery
В запросе, в качестве "параметр" можно указать forms("form_name").object.value
|
<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 <Денис Т.> Статус: 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
|
Ну и в ручную, через связанную с фильтром форму ввода. А так, чтобы фильтр формировался автоматически на основе когда-то в другом месте введенных полей в некой таблице - тока через скрипт.
|
|
|