Доступ к поиску для конкретной записи - PullRequest
0 голосов
/ 01 октября 2018

У меня есть база данных доступа (таблицы хранятся в виде списков SharePoint).

У меня есть форма под названием «Просмотр», в которой есть поле со списком, содержащее названия компаний - пользователь может выбрать здесь название компании, которое заполняетсясубформа под названием 'ReviewDetail'.Источником записи формы «Просмотр» является таблица «Компании».

Когда пользователь выбирает компанию в поле со списком, возвращаются все записи (за все месяцы).Затем пользователь может переключаться между обзорами, используя кнопки в форме.Этот источник записи подчиненных форм представляет собой таблицу с именем «Отзывы».

При проверке формы я использую нижеприведенное (при изменении), которое возвращает записи.

DoCmd.SearchForRecords , "", acFirst, "[Company] = " & "'" & [Forms]![Review]![Company] & "'"

Мне нужно иметь возможностьвключить Месяц из поля со списком, чтобы вернуть эту конкретную запись.

Я пытался:

DoCmd.SearchForRecords , "", acFirst, "[Company] = " & "'" & [Forms]![Review]![Company] & "' AND [Month] = '" & Me.Month & "'"

, но это не работает.

Этоприложение, которое мне дали сохранить (не создано мной).

Как я могу просто вернуть конкретную запись?Я думаю, что я запутался вокруг двух разных таблиц (обратите внимание, что таблица Companies не содержит значения месяца).

1 Ответ

0 голосов
/ 02 октября 2018

Хорошо, ваше описание формы и подчиненной формы немного расплывчато, поэтому позвольте мне изложить то, что, по вашему мнению, вы описываете, а затем представить решение, и вы можете сообщить нам, правильно ли это или нет.

Ваша основная форма с именем Review привязана к таблице Company в качестве RecordSource и отображает подробные поля для отдельной компании.В этой главной форме у вас также есть поле со списком всех компаний.

У вас есть подчиненная форма с именем ReviewDetail, связанная с таблицей Reviews, которая содержит ВСЕ отзывы.для ВСЕХ компаний.В подчиненной форме используется связывание подчиненной формы, чтобы связать компанию в основной форме с компанией в подчиненной форме, чтобы во время выполнения подчиненная форма отображала только отзывы о текущей компании, отображаемые в главной форме.

Когда пользователь выбираетКомпания из Combobox, у вас есть код в событии [OnChange], который фактически вызывает две вещи.Во-первых, основная форма переходит к выбранной компании, чтобы показать детали этой компании (через ваш код).Во-вторых, подчиненная форма, которая связана с главной формой по компании, немедленно фильтрует для отображения только отзывов для выбранной компании.

Теперь вы хотите добавить комбинированный список в подчиненную форму для дальнейшей фильтрации подчиненной формы дляопределенный месяц.

Я не уверен, как вы получаете список месяцев в вашем комбинированном ящике, но я бы сделал следующее: у меня была бы маленькая таблица с месяцами под названием tblMonths с двумя столбцами,MonthID и MonthName

MonthID  MonthName
=======  =============
      1  January
      2  February
      3  March
   etc...
     12  December

Тогда я бы установил в строке со списком RowSource of The Months Months значение:

SELECT 0 AS MonthID, "(ALL)" AS MonthName FROM tblMonths
UNION SELECT MonthID, MonthName FROM tblMonths
ORDER BY MonthID;

Это даст вам Combobox со всемиМесяцы И опция «ВСЕ» вверху, чтобы пользователь мог отображать Все месяцы или только один месяц.И ваш Combobox будет иметь два столбца, поэтому вам нужно будет отформатировать его соответствующим образом, чтобы отобразить только 2-й столбец, со свойствами, подобными следующим:

Combobox Format example which hides the first column (MonthID) and displays the second column (MonthName) when clicked

Теперь в событии [AfterUpdate] вашего ComboBox, которое находится в вашей подчиненной форме, вы будете использовать следующий код (предположим, что имя Combobox cboMonth)

Dim mssql As String    

'Note, by concatenating a zero length string to the current value of the
'    Combox and making sure the length is greater than zero, we can
'    easily confirm that the user actually selected one of the items
'    in the list, as opposed to accidentally clearing out the Combobox
'If we did not check this before relying on the value of the Combobox,
'    our code would produce an error at runtime if the user did clear the Combobox
If Len(Me.cboMonth & "") > 0 Then
    If Me.cboMonth = 0 Then   'They chose "ALL"
        Me.FilterOn = False
    Else
        mssql = "[Month] = """ & Me.cboMonth.Column(1) & """"
        Me.Filter = mssql
        Me.FilterOn = True
    End If
Else
    'Since the user cleared the Combobox, let's set the value
    'back to "ALL" and display ALL records
    Me.cboMonth = 0
    Me.FilterOn = False
End If

С этим кодом,подчиненная форма будет фильтроваться по выбранному месяцу, ИЛИ показывать все месяцы в зависимости от того, что выберет пользователь.Если поле в подчиненной форме, содержащее «Месяц», не имеет названия Month, как вы, вероятно, указываете в своем примере кода, тогда вам нужно изменить [Month] в моем коде выше на правильное имя в квадратных скобках.

Наконец, чтобы улучшить ваш корпоративный список в главной форме, я бы изменил и событие, и код, который вы используете для перехода к определенной компании.Опять же, я бы использовал событие AfterUpdate вместо события OnChange .Гораздо надежнее в таких ситуациях.И я бы использовал следующий код (предположим, что компания Combobox названа cboCompany):

Dim rst As DAO.RecordSet
Dim mssql As String

If Len(Me.cboCompany & "") > 0 Then
    Set rst = Me.RecordsetClone
    mssql = "[Company]=""" & Me.cboCompany & """"
    rst.FindFirst mssql
    Me.Bookmark = rst.Bookmark
    'If you then want to default the "Months" Combobox on the Subform to "ALL"
    Me.ReviewDetail.Form.cboMonth = 0
    me.cboCompany = Null
End If
Set rst = Nothing

С этим кодом главная форма переходит к выбранной компании (или ничего не делает, если пользователь просто очищаетCombobox) и устанавливает Months Combobox в подчиненной форме обратно в значение «ALL», чтобы изначально отображались все отзывы.Затем он очищает корпоративный комбинированный список, чтобы он был готов к следующему выбору пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...