Устранение неполадок Фильтр отчета о доступе
У меня есть отчет о нескольких собраниях с несколькими записями на одно собрание. Я настроил всплывающую форму для выбора одной конкретной даты встречи с помощью поля со списком и использую ее для фильтрации формы в целях печати. (Встроенная фильтрация кликов неуклюжа, и очевидно, что комбинированные блоки не работают с отчетами.) Все это работает отлично с первого раза. Проблема возникает, когда я пытаюсь выбрать другую дату встречи - в отчете по-прежнему отображается первое выбранное собрание, несмотря на все попытки очистить фильтр, кроме закрытия формы и повторного открытия. Я поместил следующий код в кнопку отчета, которая открывает форму выбора:
Private Sub cmdMeetingSelect_Click()
'Clear any pre-existing filter
Me.Filter = ""
Me.FilterOn = False
'Open form to filter the report
DoCmd.OpenForm "frmMeetingSelect"
End Sub
Откроется форма, я вижу, что фильтр отключен в отчете, и я могу выбрать новую дату в форме, но старая дата все еще используется для повторной фильтрации отчета.
Включение следующего в форму выбора не помогает:
Private Sub Form_Open(Cancel As Integer)
Me.cboMeetingSelect = ""
End Sub
Этот код в форме выбора отправляет выбор фильтра обратно в отчет. Не уверен, что что-то из этого заставляет работать только один раз:
Private Sub cmdFilterMeeting_Click()
'Run a filter on the RSVPAttendance report
Reports!rptRSVPAttendance.Filter = "MeetingDate = Forms!frmMeetingSelect.cboMeetingSelect"
Reports!rptRSVPAttendance.FilterOn = True
'Close selection form
DoCmd.Close
End Sub
Щелкая через Advanced -> Clear All Filters
в отчете тоже неэффективно.
Я видел несколько старых сообщений об ошибках, связанных с фильтрацией форм с помощью комбинированных окон в Access 2010, но наверняка это уже исправлено? Что еще мне не хватает?
2 ответа
Строка вашего фильтра странная. Следует читать:
Reports!rptRSVPAttendance.Filter = "MeetingDate = #" & Format(Forms!frmMeetingSelect.cboMeetingSelect.Value, "yyyy\/mm\/dd") & "#"
Здесь есть несколько странных вещей:
избавьтесь от этих строк в cmdMeetingSelect_Click, они ничего не делают для вашего отчета, который управляет фильтрами в форме: Me.Filter = "" Me.FilterOn = False
У вас есть синтаксическая ошибка в критериях фильтра, но это не главное. Я думаю, вы ожидаете, что фильтр изменится, когда отчет в данный момент открыт. это не будет работать, вы должны закрыть отчет и снова открыть его, и вы не можете изменить фильтры таким образом. вместо этого я предлагаю установить условие where в отчете, а не пытаться применить фильтр. Однако прежде чем сделать это, откройте этот отчет в режиме разработки, удалите все существующие фильтры, а также отключите фильтры. Затем замените то, что у вас есть в cmdFilterMeeting_Click на это:
Const RptName As String = "rptRSVPAttendance"
'close report if already open
If SysCmd(acSysCmdGetObjectState, AcObjectType.acReport, RptName) = 1 Then 'report is open
DoCmd.Close acReport, RptName
End If
'open report with where criteria, no filtering needed
DoCmd.OpenReport RptName, acViewPreview, , ("[MeetingDate] = #" & Me.cboMeetingSelect.Value & "#")
'close form
DoCmd.Close acForm, Me.Name