Access 2016: Попытка получить кнопки для отображения информации не только о первой найденной записи - PullRequest
0 голосов
/ 10 января 2020

Имеют 2 таблицы с именами Sites и Provisioning, на которые ссылаются другие таблицы. Обе таблицы имеют отношение многие ко многим. Существует третья таблица, известная как RSIDCircuit с составным ключом, созданным из ключей сайтов и ресурсов. Имейте запрос, MainQuery, который настроен для запроса этих трех таблиц, и форма, MainForm, имеет функцию поиска по этому запросу. Создается подчиненная форма, которая отображает информацию об адресе с сайта, который был найден. Созданы две дополнительные формы (ActiveProForm, ReloProForm), основанные на двух запросах (ProActiveQuery, ProReloQuery), когда канал активен на сайте или канал заказан для отложенного перемещения. Созданы две кнопки для ссылки на схему для сайта на основе того, является ли цепь активной или схемой перемещения. Вот где проблема существует.

Когда поиск выполняется, он всегда ссылается на первый в списке независимо от типа выполненного поиска. Был создан один поиск, который помещает результаты в скрытое поле со списком, но при нажатии кнопки фокусируется только на первом. Когда кнопки нажаты, он откроет правильную форму, но он только когда-либо подтянет первый контур. Например, при поиске на сайте с активной цепью активная кнопка отобразит результаты, а кнопка relo будет пустой. Если на сайте есть только рело-схема, то происходит обратное. Тем не менее, когда на сайте есть и активная, и реоло-цепь, активная кнопка отобразит результаты, и рело будет пустым.

Попытка найти способ создания кнопки, которая в основном запускает запрос с указанным c условием активности или идентификатора relo, и открывает форму с соответствующей информацией. Врезались в стену, пытаясь найти какой-либо способ сделать эту работу как задумано. Любая помощь с благодарностью.

Код поиска указан ниже для справки. Первый был закомментирован при тестировании второго.

    Private Sub cmdSearch_Click()

 'Dim bkmk As Variant
    'Dim strField As String

    'Me.RecordsetClone.MoveFirst
    'Find the first record that matches what
    'is in the search text box.
    'Me.RecordsetClone.FindFirst "RSID Like " _
        '& Chr(34) & Me.txtSearch & "*" & Chr(34) _
        '& "OR CJON Like " _
        '& Chr(34) & Me.txtSearch & "*" & Chr(34) _
        '& "OR TSR Like " _
        '& Chr(34) & Me.txtSearch & "*" & Chr(34)

    'If Me.RecordsetClone.NoMatch Then
        'MsgBox "No Match"
    'Else
        'bkmk = Me.RecordsetClone.Bookmark
        'Me.Recordset.Bookmark = bkmk
    'End If

End Sub

Private Sub forSearch_Change()

'Create a string (text) variable
    Dim vSearchString As String

'Populate the string variable with the text entered in the Text Box SearchFor
    vSearchString = forSearch.Text

'Pass the value contained in the string variable to the hidden text box SrchText,
'that is used as the sear4ch criteria for the Query QRY_SearchAll
    txtSearch.Value = vSearchString

'Requery the List Box to show the latest results for the text entered in Text Box SearchFor
    Me.SearchResults.Requery


'Tests for a trailing space and exits the sub routine at this point
'so as to preserve the trailing space, which would be lost if focus was shifted from Text Box SearchFor
    If Len(Me.txtSearch) <> 0 And InStr(Len(txtSearch), txtSearch, " ", vbTextCompare) Then
        'Set the focus on the first item in the list box
            Me.SearchResults = Me.SearchResults.ItemData(1)
            Me.SearchResults.SetFocus
        'Requery the form to refresh the content of any unbound text box that might be feeding off the record source of  the List Box
            DoCmd.Requery
        'Returns the cursor to the the end of the text in Text Box SearchFor,
        'and restores trailing space lost when focus is shifted to the list box
            Me.forSearch = vSearchString
            Me.forSearch.SetFocus
            Me.forSearch.SelStart = Me.forSearch.SelLength

        Exit Sub
    End If


'Requery the form to refresh the content of any unbound text box that might be feeding off the record source of  the List Box
    DoCmd.Requery

'Returns the cursor to the the end of the text in Text Box SearchFor
    Me.forSearch.SetFocus

    If Not IsNull(Len(Me.forSearch)) Then
        Me.forSearch.SelStart = Len(Me.forSearch)
    End If

End Sub
...