Есть несколько аспектов этого и много возможных решений.
Кажется, что у вас есть следующие основные вопросы / цели:
- Как должна выглядеть схема (таблицы), чтобы обеспечить связь между двумя записями в одной таблице?
- Как перейти с одной записи в форме (одиночное представление) на связанную запись?
Есть несколько способов связать записи вместе. Самым простым, вероятно, является поле в таблице, содержащее идентификатор той же таблицы. Недостатком является то, что данные могут быть несовместимыми: если запись 1 ссылается на запись 2, должна быть запись 2, ссылка на запись 1 взамен? Может быть. Может быть, это не имеет значения для вас.
Примечание: если вам нужно связать больше, чем просто пары записей (то есть группы из более чем двух), тогда простое поле самоссылки не будет работать (если вы не объедините их в цепочку, но - чёрт). В этом случае у вас должна быть другая таблица, в которой есть записи для каждого элемента в каждой группе. Я проигнорирую это, так как ты специально сказал пары записей.
Поэтому добавьте поле в таблицу, называемое чем-то вроде RelatedItemID
. Это должен быть номер того же типа данных, что и идентификатор таблицы.
Далее вы хотите способ создания ссылок. Я предлагаю поле со списком в форме, которая перечисляет все записи из этой таблицы и имеет ControlSource
установленный в поле RelatedItemID
.
Наконец, чтобы перейти к соответствующей записи, достаточно просто использовать код VBA за кнопкой.
Private Sub JumpToRelated_Click()
Me.RecordsetClone.FindFirst "ID = " & RelatedItemID
If Not Me.RecordsetClone.NoMatch Then
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End Sub
Это переместит форму к связанной записи.
Для обеспечения согласованности, т. Е. Обеспечения двухсторонней связи, может потребоваться некоторый код в событии AfterUpdate поля со списком, чтобы установить ссылку «другой» записи на текущую запись и очистить старую ссылку (если есть). Это не обязательно - это просто означает, что в противном случае пользователю придется вручную поддерживать двустороннюю связь.