Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
1

Ошибка при наложении программного фильтра и фильтра на форме

30.09.2016, 11:05. Просмотров 1955. Ответов 17
Метки нет (Все метки)


Добрый день,
на форме программно устанавливается фильтр записей - все хорошо.
но когда средствами аксесс формы дополнительно пытаешься отфильтровать записи (кликнув на поле и выбрав фильтр к примеру в этом месяце или любой другой) выскакивает ошибка.
Как от этого уйти? если возможно
0
Миниатюры
Ошибка при наложении программного фильтра и фильтра на форме  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2016, 11:05
Ответы с готовыми решениями:

Какой метод синтеза фильтра обеспечивает наименьшее число параметров фильтра при заданных ограничениях АЧХ?
Доброго времени суток! Подскажите пожалуйста,какой метод синтеза фильтра обеспечивает наименьшее...

Ошибка при создании фильтра
procedure TfDM.ComboBox2Change(Sender: TObject); begin if RadioButton6.Checked = True then begin...

Ошибка при применении фильтра
Здравствуйте. Подскажите, пожалуйста, в чем может быть ошибка? База создана в IBExpert. В Delphi на...

Регистратор фильтра WFP. Ошибка 0xc000007 при запуске
Запуск не удается на чистой Win7x64 с установленными VC Redists 2008/2010/2015. Вылетает данная...

17
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
30.09.2016, 11:11  [ТС] 2
и новое условие не добавляется в фильтр а записи отбираются по фильтру который выбрал на форме...
0
шапоклякистка 8-го дня
3654 / 2215 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
30.09.2016, 11:41 3
Цитата Сообщение от boby104 Посмотреть сообщение
выскакивает ошибка.
А что это за выражение, с Nz без второго аргумента - это у вас в форме такое вычислимое поле? Вычислимые поля не фильтруются, переместите выражение в запрос - источник записей формы.

Добавлено через 2 минуты
Цитата Сообщение от boby104 Посмотреть сообщение
и новое условие не добавляется в фильтр а записи отбираются по фильтру который выбрал на форме...
А вот как раз это - нормальное поведение аксес, он считает, что пользователь лучше знает, что и как он хочет отфильтровать.

Свой фильтр, дополнительно к выбранному пользователем, нужно дописывать программно, в обработке собтия "Фильтрация".
0
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
30.09.2016, 12:35  [ТС] 4
Цитата Сообщение от texnik-san Посмотреть сообщение
А что это за выражение, с Nz без второго аргумента
там есть второй аргумент пустая строка ''
данные берутся из ексель и поэтому поле может быть строковым заполненным
или может быть NULL или могут быть пробелы,
фильтр отбирает записи либо нул или пробелы
либо строка не равная пустой
Цитата Сообщение от texnik-san Посмотреть сообщение
Вычислимые поля не фильтруются
поле не вычисляемое

Добавлено через 2 минуты
Цитата Сообщение от texnik-san Посмотреть сообщение
вой фильтр, дополнительно к выбранному пользователем, нужно дописывать программно
на форме программно формируется фильтр из 4 показателей основных
полей куча и предусмотреть какой доп фильт понадобиться не реально
проблема из-за последней составляющей фильтра которая видна в ошибке - ее нужно как-то преобразовать чтоб доп фильтр не ругался а принимал его за свой родной

Добавлено через 32 минуты
есть у кого - предположения по теме?
0
Эксперт MS Access
26608 / 14306 / 3166
Регистрация: 28.04.2012
Сообщений: 15,690
30.09.2016, 12:43 5
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Чтобы избежать удаления программного фильтра при наложении ручного, надежнее всего программно формировать не фильтр, а источник формы: строку RecordSource. Тогда проблем точно не будет при задании любых фильтров вручную
2
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
30.09.2016, 12:47  [ТС] 6
Цитата Сообщение от mobile Посмотреть сообщение
программно формировать не фильтр, а источник формы
согласен, но тут ситуация
рекордсос уже сформирован по условиям (критериям отбора)?
программный фильтр на форме детализирует его еще больше,
и тут мне понадобилось еще и отобрать отдельные записи - программный фильтр до последней составляющей прокатывал отлично вместе с фильтром формы - а последняя часть стала выдавать ошибку
trim(nz(pole;''))=''
0
Эксперт MS Access
26608 / 14306 / 3166
Регистрация: 28.04.2012
Сообщений: 15,690
30.09.2016, 13:20 7
Ну тогда сохраняйте программный фильтр в переменной уровня модуля, в в событии формы ApplyFilter (Применение фильтра) соединяйте сохраненную строку фильтра с текущим Me.Filter
Visual Basic
1
2
3
If переменнаяфильтра & "" <> "" Then
   Me.Filter=Me.Filter & " And " & переменнаяфильтра
End If
0
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
30.09.2016, 14:30  [ТС] 8
Цитата Сообщение от mobile Посмотреть сообщение
в в событии формы ApplyFilter (Применение фильтра) соединяйте сохраненную строку фильтра с текущим Me.Filter
сделал, но ошибка формы выскакивает до события
получается это не ошибка кода вба, на най программа не останавливается
а ошибка формы
может что с кавычками не так или формула какая брыкается
а, mobile,?

Добавлено через 6 минут
Все, всем спасибо - проблема решена
фильтр брыкался на nz(pole,'')
заменил на '' & pole
и ошибка пропала - все фильтруется
0
Эксперт MS Access
26608 / 14306 / 3166
Регистрация: 28.04.2012
Сообщений: 15,690
30.09.2016, 14:42 9
boby104, какая ошибка? Номер, описание?

2. Поставьте распечатку (debug.print) в ApplyFilter после генерации фильтра. Распечатайте содержимое сохраненной переменной фильтра, получившийся фильтр (Me.Filter) и переменную типа ApplyType
Visual Basic
1
Debug.Print переменнаяфильтра, Me.Filter, ApplyType
3. В процедуре события ошибки формы (Form_Error) также сделайте распечатку номера ошибки и описание
Visual Basic
1
Debug.Print Err, Err.Description
Покажите результаты здесь

Если в Form_Error ошибок нет, значит они в событиях. Тогда надо отлаживать код. Или выкладывайте фрагмент БД с необходимым содержанием
0
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
30.09.2016, 15:42  [ТС] 10
Цитата Сообщение от mobile Посмотреть сообщение
boby104, какая ошибка? Номер, описание?
в том то и дело ошибка без номера
я так понял это ошибка НЕ кода вба а формы.
и она срабатывает до аплайфильтер, после нее аплайфилтер отрабатывает
без ошибки (но обнулив значение фильтра, который был программно записан на форме)
Цитата Сообщение от mobile Посмотреть сообщение
В процедуре события ошибки формы (Form_Error) также сделайте распечатку номера ошибки и описание
а вот это попробую, сейчас только верну предыдущую формулировку
0
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
30.09.2016, 15:47  [ТС] 11
Цитата Сообщение от mobile Посмотреть сообщение
3. В процедуре события ошибки формы (Form_Error) также сделайте распечатку номера ошибки и описание
Visual Basic
Выделить код
1
Debug.Print Err, Err.Description
как я и предполагал, ошибка срабатывает
вот результат = 0
0
Миниатюры
Ошибка при наложении программного фильтра и фильтра на форме  
шапоклякистка 8-го дня
3654 / 2215 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
30.09.2016, 16:10 12
Цитата Сообщение от boby104 Посмотреть сообщение
Все, всем спасибо - проблема решена
фильтр брыкался на nz(pole,'')
заменил на '' & pole
А я вам во что сразу ткнула?

Цитата Сообщение от boby104 Посмотреть сообщение
поле не вычисляемое
Т.е. у вас в источнике форм есть строки, состоящие только из пробелов, и вы их не меняя отображаете в форме, но именно для цели фильтра применяете функцию Trim?

Вопрос: почему не применить функцию Trim уже в запросе, на котором основана форма? Ведь визуально для пользователя что 5 пробелов, что ни одного. А проблем с фильтрами станет сразу меньше.

Добавлено через 5 минут
Или еще один вариант (альтернатива предыдущему). Попробуйте вместо
Visual Basic
1
trim(nz(pole;''))=''
другое условие
Visual Basic
1
Space(255) like (pole & '*')
- оно тоже отфильтрует вам строки, состоящие только из пробелов или пустые, но у меня есть основания думать, что такое условие быстрее.

Вместо 255 можно взять и горадо меньшее число, лишь бы быть уверенным, что число точно больше максимальной длины строки из одних пробелов в базе.
1
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
30.09.2016, 16:17  [ТС] 13
Цитата Сообщение от texnik-san Посмотреть сообщение
состоящие только из пробелов, и вы их не меняя отображаете в форме
я сначала и догадаться не мог, что там не просто пустые поля, а есть поля с пустыми строками и с пробелами...
выяснил, когда начал фильтр применять по пустым значениям и заметил что не все строки отбираются.
а проблема в функции нз!!! - синтаксис для вба верный, а при наложении ручного фильтра идет баг.
вот нацарапал базу для игры.
флажок делает программный фильтр-
он работает как надо,
но как только вы добавите фильтр на форме по любому полю - получим ошибку формы.
0
Вложения
Тип файла: zip Расчеты.zip (33.1 Кб, 4 просмотров)
шапоклякистка 8-го дня
3654 / 2215 / 390
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
30.09.2016, 18:05 14
Я понимаю, о чем вы, но по выложенной базе не смогу тестировать: после импорта из экселя пробелы-то удалились )) Аксес концевые пробелы удаляет.
0
Эксперт MS Access
26608 / 14306 / 3166
Регистрация: 28.04.2012
Сообщений: 15,690
30.09.2016, 21:30 15
boby104, смотрите вариант с ApplyFilter
0
Вложения
Тип файла: rar Расчеты.rar (18.4 Кб, 5 просмотров)
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
03.10.2016, 09:40  [ТС] 16
Цитата Сообщение от mobile Посмотреть сообщение
смотрите вариант с ApplyFilter
mobile,
Не работает даже с аплай.
Все таки, мне кажется, это проблема функции.
Обратите внимание, что поле установки фильтра программно (флажок = 0,-1) ручной фильтр дает ошибку
0
Миниатюры
Ошибка при наложении программного фильтра и фильтра на форме   Ошибка при наложении программного фильтра и фильтра на форме  
Эксперт MS Access
26608 / 14306 / 3166
Регистрация: 28.04.2012
Сообщений: 15,690
03.10.2016, 14:33 17
Вариант с RecordSource. На загрузке исходное выражение RecordSource сохраняется в Tag формы. На событии флажка считывается из Tag и меняется с учетом значения флажка.
2
Вложения
Тип файла: rar Расчеты.rar (18.3 Кб, 2 просмотров)
918 / 374 / 101
Регистрация: 21.03.2013
Сообщений: 987
03.10.2016, 16:45  [ТС] 18
Цитата Сообщение от mobile Посмотреть сообщение
Вариант с RecordSource. На загрузке исходное выражение RecordSource сохраняется в Tag формы.
Интересное решение, для меня тема была уже закрыта, так как я заменил функцию НЗ, на выражение пусто+Поле, которая дает результат верный.
Но ваш вариант на будущее пригодиться.
Не знал что в отборе select можно использовать конструкцию where true. Возьму на вооружение
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2016, 16:45

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Ошибка при попытке запуска звукового фильтра в симулинк
После того как спроектировал фильтр в filterbuilder в матлабе нужно проверить на симулинке , но...

Ошибка: Matrix must be square. при построении АЧХ RC-фильтра
R=1; C=2; fc=(2*3,14*R*C)^-1; Ku=1/(1+(2*pi*f*R*C)^2)^0.5;plot(Ku,f);grid; ??? Error using ==&gt;...

Применение фильтра на форме
я сделал ФИЛЬТР в таблице . СВЕРХУ НАЖАЛ НА КНОПКУ ФИЛЬТР как сделать так чтобы поиск был на...

Применение фильтра в форме
есть форма абоненты, в ней кнопка Должники при нажати этой кнопки должны выводится те люди у...

Ошибка invalid floating point operation в Delphi при реализации фильтра Собеля
Помогите разобраться, в чем ошибка при реализации фильтра Собеля var Form1: TForm1; c:TColor;...

Применение макроса фильтра в подчиненной форме
добрый день! подскажите пожалуйста. у меня есть запрос. я в форме с помощью макроса в форме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.