Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Фильтр в запросе / 8 сообщений из 8, страница 1 из 1
23.12.2015, 10:15
    #39135454
superpsih
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр в запросе
Есть форма с текстовым полем. Называем его фильтр. Вбиваем туда какой-то текст. Жмём кнопку, открывается форма в которой есть поле со списком. Как сделать запрос, который брал бы данные из текстового поля первой формы и фильтровал по ним это поле со списком таким образом, чтобы отображались только те записи, которые содержат текст из первой формы (поле со списком содержит большой список данных, если в поле "фильтр" вбить текст, то во второй форме должны в поле со списком отображаться только те значения, которые содержат строку из "фильтра").
...
Рейтинг: 0 / 0
23.12.2015, 10:48
    #39135492
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр в запросе
Шаг 1:
Открывешь первую форму нормально. Забиваешь текст в поле.
Шаг 2:
Вторую форму открывешь в дизайне. В поле со спимском открывешь мастер посторителя запросов. Строишь запрос. Становишься в поле фильтра (where) и вызываешь визард (правой мышью). Находишь первую открытую форму и соотвтетствующее поле. Выбираешь его. Запускаешь запрос и проверяешь, что он работает корректно. Закрываешь мастера. Изучаешь текст запроса и в следующий раз уже пишешь все самосотоятельно без мастеров. Сохраняешь вторую форму.
Шаг 3:
Первую форму открываешь в дизайне и на событии AfterUpdate поля фильбра пишешь процедуру (или макро, как сейчас модно (ненавижу!)) requery на вторую форму.
Швг 4 последний:
Вновь открывешь аервую форму. Открываешь фторую форму. В первой вводишь значение фильтра. Ентер. Проверяешь, что получилось во второй.
усе

ЗЫ
Это, конечно, не единственное решение. Дело вкуса. Можно фильтровать, например, рекордсет второй формы прямо из первой.
Можно из первой формировать запрос для второй. Еще эффектнее, посадить соурс поля со списком на сохраненную процедуру с параметром фильтровки. И параметр этот посылать из первой формы...
...
Рейтинг: 0 / 0
23.12.2015, 11:24
    #39135563
superpsih
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр в запросе
Спасибо, буду пробовать!
...
Рейтинг: 0 / 0
23.12.2015, 11:34
    #39135593
Фильтр в запросе
Допустим Форма2 лежит на таблице2 (Т2), в которой поле со списком связано с "Поле2", а поле со списком берет данные из таблицы1 (Т1), имеющей поле с текстом "Поле1" и ключевое поле "ID", значение которого и хранится в "Поле2".
Тогда при вызове Формы2 нужно указать фильтр:
Код: sql
1.
"[Поле2] In (SELECT ID FROM Т1 WHERE [Поле1] = '" & Me![Фильтр] & "'"



Если в поле "Фильтр" предполагается указывать только часть значения, то вместо "=" укажите Like и примените символы шаблона.
...
Рейтинг: 0 / 0
23.12.2015, 11:45
    #39135624
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр в запросе
Возник вопрос. Чисто теоретический.
А если источник данных поля со списком не запрос, а список значений,
к нему подобный "фильтр" можно ли как-то применить?
...
Рейтинг: 0 / 0
23.12.2015, 11:57
    #39135660
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр в запросе
__MichelleВозник вопрос. Чисто теоретический.
А если источник данных поля со списком не запрос, а список значений,
к нему подобный "фильтр" можно ли как-то применить?
Карты в руки! Пробуй, докладай!
...
Рейтинг: 0 / 0
23.12.2015, 14:01
    #39136002
superpsih
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр в запросе
Сделал через запрос с критерием отбора со следующим кодом:
Код: vbnet
1.
Like "*" & [forms]![Form1].[Field1] & "*"


Заработало. Как бы теперь ещё сделать, чтобы выбранные позиции исчезали из выпадающего списка?
...
Рейтинг: 0 / 0
24.12.2015, 12:10
    #39136958
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтр в запросе
Rivkin Dmitry__MichelleВозник вопрос. Чисто теоретический.
А если источник данных поля со списком не запрос, а список значений,
к нему подобный "фильтр" можно ли как-то применить?
Карты в руки! Пробуй, докладай!Ну что ж, раз инициатива, как всегда, наказуема....)))

Если в списке один столбец.
Вариант 1. С функцией Filter.
Код: vbnet
1.
Lst.RowSource = Join(Filter(Split(<исходный RowSource>, ";"), <искомый фрагмент>, True, vbTextCompare))

Вариант 2. Без функции Filter.
Код: vbnet
1.
2.
3.
4.
5.
6.
 Dim m, s As String, i As Integer
 m = Split(<исходный RowSource>, ";")
 For i = 0 To UBound(m)
  s = s & IIf(m(i) Like "*" & <искомый фрагмент> & "*", m(i) & ";", "")
 Next
 Lst.RowSource = s


Если в списке больше одного столбца.
Вариант 3.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 Dim k As Byte, ks As Byte
 Dim m, s As String, i As Integer, j As Byte, n As Integer
 k = <количество столбцов>
 ks = <нужный столбец>
 m = Split(<исходный RowSource>, ";")
 n = -1
 For i = ks - 1 To UBound(m) Step k
  n = n + 1
  If m(i) Like "*" & <искомый фрагмент> & "*" Then
   For j = n * k To n * k + (k - 1)
    s = s & m(j) & ";"
   Next
  End If
 Next
 Lst.RowSource = s
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Фильтр в запросе / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]