У меня есть простая плоская база данных с примерно 40 полями. Каждая запись имеет уникальный идентификатор.
Есть несколько пар записей, которые имеют слабую связь, и я бы хотел разместить ссылку/закладку на каждой записи, чтобы можно было напрямую перейти к связанной записи.
Этозапись к записивозможно ли связывание в рамках простой плоской структуры базы данных?
решение1
Здесь есть несколько аспектов и много возможных решений.
Похоже, что ваши основные вопросы/цели таковы:
- Как должна выглядеть схема (таблицы), чтобы обеспечить связь между двумя записями в одной таблице?
- Как перейти от одной записи в форме (единое представление) к связанной записи?
Есть несколько способов связать записи вместе. Самый простой, вероятно, это поле в таблице, которое содержит идентификатор той же таблицы. Недостаток в том, что данные могут быть несогласованными: если запись 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 выпадающего списка, чтобы установить ссылку записи «другой» на текущую запись и очистить старую ссылку (если таковая имеется). Это не обязательно — это просто означает, что пользователю придется вручную поддерживать двустороннюю связь в противном случае.