массив int для возврата к предыдущей записи - PullRequest
0 голосов
/ 20 марта 2020

У меня есть стандартная форма, которая отображает информацию на основе partID. Форма имеет подчиненную форму, показывающую вспомогательные элементы детали, где при двойном щелчке вы попадете на этот номер детали (фрагмент кода ниже). var_lastPartID является глобальной длинной переменной, которая записывает текущий идентификатор, поэтому после нажатия кнопки возврата вы вернетесь к предыдущей записи. Тем не менее, поскольку это может хранить только 1 значение за раз, я думаю, что лучшим способом было бы сохранить массив long / int, при котором при двойном щелчке сохраняется текущий идентификатор. Когда вы нажимаете кнопку возврата, он берет последнее добавленное значение и возвращает вас к этой записи, а затем удаляет эту запись, чтобы при следующем нажатии кнопки возврата она возвращала вас к следующей записи. Тем не менее, мой опыт работы с VBA очень ограничен, и я не использовал их раньше. Пожалуйста, кто-нибудь может объяснить синтаксис, как я мог этого добиться?

Private Sub childPart_DblClick(Cancel As Integer)
    var_lastPartID = Forms![Part]![part_ID].Value
    Forms("Part").Recordset.FindFirst ("part_ID = " & childPart)
End Sub

1 Ответ

0 голосов
/ 22 марта 2020

Хорошо, значит, у вас есть родительская форма, а затем вложенная форма.

Вы щелкаете по строке в вложенной форме. Вы хотите, чтобы родительская форма JUMP к этой записи. Но так как вы можете сделать это несколько раз, то на главной форме вы захотите нажать кнопку «назад» или «предыдущий». Когда вы нажимаете эту кнопку «назад», вы хотите, чтобы предыдущий идентификатор, который вы перепрыгнули, имел место.

Хорошо, способ управлять этим и иметь следующий / предыдущий набор кнопок, которые пересекают записи, на которые вы смотрели , работал и нажимал?

Хорошо, в главной форме, на уровне модуля кода, создайте указатель, коллекцию и подпрограмму, подобную этой:

  Option Compare Database
  Option Explicit

  Dim intListPosition     As Integer
  Dim colRecords          As New Collection


  Public Sub AddAndJump(MyID As Long)

     ' add this new ID to the list
     intListPosition = intListPosition + 1

     colRecords.Add MyID, CStr(intListPosition)

     ' now jump (move) to this record
     Me.Recordset.FindFirst "ID = " & MyID

  End Sub


  Public Sub BackOne()

     ' call this code from your back buttion
     ' go to previous record

     If intListPosition > 1 Then
        intListPosition = intListPosition - 1
        Me.Recordset.FindFirst "ID = " & colRecords.Item(CStr(intListPosition))
     End If

  End Sub


  Public Sub ForwardOne()
     'call this code from your forward buttion
     If intListPosition < colRecords.Count Then
        intListPosition = intListPosition + 1
        Me.Recordset.FindFirst "ID = " & colRecords.Item(CStr(intListPosition))
     End If

  End Sub

  Private Sub cmdBack_Click()

     BackOne

  End Sub

  Private Sub cmdNext_Click()

     ForwardOne

  End Sub

Таким образом, вышеприведенное идет в основной форме.

В моем «образце» кода, я использовал ID, вы должны изменить его на part_id

Теперь, ваш код кнопки в под-форме идет чтобы быть «похожим» на то, что у вас есть, но теперь вы можете использовать это:

Call Me.Parent.AddAndJump(Me.ID)

Итак, вышеизложенное теперь позволит кнопку «следующий / назад» в верхней форме, когда вы нажимаете и выбираете элементы из нижней формы (подформа), затем будет сформирован список «id», и будут работать кнопки для следующего / пред.

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