Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтрация на форме, Фильтрация на форме 
:(
    Опции темы
Artmishin
Дата 26.10.2009, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



На форме имеется два поля "pole1" и "pole2" по которым ведется отбор значений из ленточной формы по полям "pole1_1" и "pole2_2", соответственно.
Для фильтрации данных создал макрос "Применить фильтр"
Код

[pole1_1] LIKE "*"+[Формы]![Просмотр]![pole1]+"*" AND [pole2_2] LIKE "*"+[Формы]![Просмотр]![pole2]+"*" 

Фильтрация записей производится без проблем, но только если оба поля ("pole1" и "pole2") не пустые. Как бы мне реализовать такое условие, при котором пустое поле просто игнорировалось или выводились все записи, в общем чтобы не мешало фильтрации.
PM MAIL   Вверх
bopoha
Дата 26.10.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Artmishin, тогда вам придется все же забыть о макросах и написать этот код на VBA.

Пример:
Код

dim stFilter as string

if nz(me.pole1) <> "" then
   if stFilter <> "" then stFilter = stFilter & " AND "
   stFilter = stFilter & " pole1 like ""*" & me.pole1 & "*"""
end if

'-- ....
With Me.SubForm.Form
    if stFilter <> "" then
      .Filter = stFilter
    else
      .Filter = "True" '-- иногда FilterOn = False не работает, если на главной форме находится несколько подчиненных форм
    end if

    .FilterOn = True
End With


Это сообщение отредактировал(а) bopoha - 26.10.2009, 16:57
PM MAIL WWW ICQ Skype GTalk   Вверх
kapbepucm
Дата 26.10.2009, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



bopoha, а в макросе каким нибудь "IIF" нельзя воспользоваться?

типа того:
Код
IIF([Формы]![Просмотр]![pole1]="";TRUE;[pole1_1] LIKE "*" & [Формы]![Просмотр]![pole1] & "*")
 AND 
IIF([Формы]![Просмотр]![pole2]="";TRUE;[pole2_2] LIKE "*" & [Формы]![Просмотр]![pole2] & "*")


Внимание, код не проверял.

Это сообщение отредактировал(а) kapbepucm - 26.10.2009, 13:51


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
bopoha
Дата 26.10.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



kapbepucm, макросы зло. smile
PM MAIL WWW ICQ Skype GTalk   Вверх
Akina
Дата 26.10.2009, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(kapbepucm @  26.10.2009,  14:40 Найти цитируемый пост)
а в макросе каким нибудь "IIF" нельзя воспользоваться?

NZ


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
kapbepucm
Дата 26.10.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Цитата(bopoha @  26.10.2009,  13:58 Найти цитируемый пост)
зло
Почему? Штука ведь мощная, тока не гибкая.

Добавлено через 5 минут и 45 секунд
Код
(NZ([Формы]![Просмотр]![pole1]) AND ([pole1_1] LIKE "*" & [Формы]![Просмотр]![pole1] & "*"))
 AND
(NZ([Формы]![Просмотр]![pole2]) AND ([pole1_2] LIKE "*" & [Формы]![Просмотр]![pole2] & "*"))
Кажись, akina это имел ввиду.


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Artmishin
Дата 26.10.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Уважаемый bopoha, не могли бы Вы прокоментировать свой код, в частности
Код

With Me.SubForm.Form
    if stFilter <> "" then
      .Filter = stFilter
    else
      .Filter = "True" '-- иногда FilterOn = False не работает, если на главной форме находится несколько подчиненных форм на 
    end if

1. Если у меня нет подчиненной формы, можно заменить Me.SubForm.Form на Me.Form?
2. Для каждого условия, необходимо задавать свою строковую переменную (stFilter, stFilter1, stFilter2 и т.д.)?
3. Ниже Вашего условия добавил свое
Код

if nz(me.pole1) <> "" then
   if stFilter <> "" then stFilter = stFilter & " AND "
   stFilter = stFilter & " pole1_1 like ""*" & me.pole1 & "*"""
end if

if nz(me.pole2) <> "" then
   if stFilter <> "" then stFilter = stFilter & " AND "
   stFilter = stFilter & " pole2_2 like ""*" & me.pole2 & "*"""
end if

У меня привязан код к кнопке. По одному условию, фильтрация работает как хотелось, но при добавлении нового условия выводится MessageBox с вводом значения "pole2", как это обойти если на перспективу добавить еще несколько полей отбора?

Это сообщение отредактировал(а) Artmishin - 26.10.2009, 16:06
PM MAIL   Вверх
bopoha
Дата 26.10.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(kapbepucm @  26.10.2009,  15:39 Найти цитируемый пост)
Почему? Штука ведь мощная, тока не гибкая.

Как только просиходит ошибка, ее обработать не получается.
Плюc не гибко и не сопровождаемо.

Это сообщение отредактировал(а) bopoha - 26.10.2009, 16:49
PM MAIL WWW ICQ Skype GTalk   Вверх
bopoha
Дата 26.10.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Цитата(Artmishin @  26.10.2009,  15:51 Найти цитируемый пост)
1. Если у меня нет подчиненной формы, можно заменить Me.SubForm.Form на Me.Form?

Нет. Достаточно ключевого слова Me.


Цитата(Artmishin @  26.10.2009,  15:51 Найти цитируемый пост)
With Me.SubForm.Form
    if stFilter <> "" then
      .Filter = stFilter
    else
      .Filter = "True" '-- иногда FilterOn = False не работает, если на главной форме находится несколько подчиненных форм на 
    end if

with - конструкция VB. Что-бы меньше писать.
.Filter = "True" - всегда истинное условие, т.е. отобразятся все записи.
.FilterOn - атрибут, который включает, выключает фильтр на форме.


Цитата(Artmishin @  26.10.2009,  15:51 Найти цитируемый пост)
2. Для каждого условия, необходимо задавать свою строковую переменную (stFilter, stFilter1, stFilter2 и т.д.)?

Нет, конечно.

Цитата(Artmishin @  26.10.2009,  15:51 Найти цитируемый пост)
По одному условию, фильтрация работает как хотелось, но при добавлении нового условия выводится MessageBox с вводом значения "pole2", как это обойти если на перспективу добавить еще несколько полей отбора?

Это сообщение говорит о том, что в источнике данных для этой формы нет поля с именем pole2. Так, же я не нашел это имя в вашем коде. Если не справитесь, можете привести содержимое переменной stFilter и источника данных для формы.
PM MAIL WWW ICQ Skype GTalk   Вверх
Artmishin
Дата 26.10.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



bopoha получилось! У меня имя содержало пробел, поэтому и появлялось сообщение. Спасибо Вам большое.
Вы бы не могли посоветовать литературу для начинающих по access, которое бы охватывало VBA. Есть несколько самоучителей подобных "Кликните правой кнопкой мыши", но там нет конкретики, нет алгоритма с чего начинать и к чему двигаться.
PM MAIL   Вверх
bopoha
Дата 26.10.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21



Artmishin, я уже говорил об этом. 
Повторюсь:
"Разработка настольных приложений в Access 2002"
"Разработка корпоративных приложений в Access 2002"

Вот в них будет о программировании. 

Так же не забываем про Help. Там все описано.

P.S. "Профессиональное программирование в Microsoft Access 2002" - как-то читал. Тоже ни че так.

Это сообщение отредактировал(а) bopoha - 26.10.2009, 19:54
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.