Ich habe eine einfache, flache Datenbank mit etwa 40 Feldern. Jeder Datensatz hat eine eindeutige ID.
Bei einigen Datensatzpaaren besteht eine schwache Verbindung, und ich möchte bei jedem Datensatz einen Link/ein Lesezeichen einfügen, damit ich direkt zum verbundenen Datensatz springen kann.
Ist dasAufzeichnung aufzeichnenVerknüpfung innerhalb einer einfachen flachen Datenbankstruktur möglich?
Antwort1
Dies hat mehrere Aspekte und viele mögliche Lösungen.
Ihre wichtigsten Fragen/Ziele scheinen zu sein:
- Wie muss das Schema (die Tabellen) aussehen, um eine Verknüpfung zwischen zwei Datensätzen in derselben Tabelle zu ermöglichen?
- Wie springt man von einem Datensatz in einem Formular (Einzelansicht) zum zugehörigen Datensatz?
Es gibt mehrere Möglichkeiten, die Datensätze miteinander zu verknüpfen. Die einfachste ist wahrscheinlich ein Feld in der Tabelle, das die ID derselben Tabelle enthält. Der Nachteil ist, dass die Daten möglicherweise inkonsistent sind: Wenn Datensatz 1 auf Datensatz 2 verweist, muss Datensatz 2 dann auch auf Datensatz 1 verweisen? Vielleicht. Vielleicht ist Ihnen das egal.
Hinweis: Wenn Sie mehr als nur Datensatzpaare verknüpfen müssen (also Gruppen von mehr als zwei), funktioniert das einfache selbstreferenzierende Feld nicht (es sei denn, Sie verketten sie, aber – igitt). In diesem Fall benötigen Sie eine weitere Tabelle, die Datensätze für jedes Element in jeder Gruppe enthält. Ich werde das ignorieren, da Sie ausdrücklich Datensatzpaare erwähnt haben.
Fügen Sie der Tabelle also ein Feld mit einem Namen wie hinzu RelatedItemID
. Es sollte eine Zahl vom gleichen Datentyp wie die ID der Tabelle sein.
Als nächstes möchten Sie eine Möglichkeit zum Erstellen der Links. Ich schlage eine Kombinationsbox im Formular vor, die alle Datensätze aus dieser Tabelle auflistet und ein ControlSource
Feldset enthält RelatedItemID
.
Um schließlich zum zugehörigen Datensatz zu springen, müssen Sie lediglich VBA-Code hinter einer Schaltfläche verwenden.
Private Sub JumpToRelated_Click()
Me.RecordsetClone.FindFirst "ID = " & RelatedItemID
If Not Me.RecordsetClone.NoMatch Then
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
End Sub
Dadurch wird das Formular zum zugehörigen Datensatz navigiert.
Um Konsistenz zu gewährleisten, also die Zweiwegebeziehung zu erzwingen, benötigen Sie möglicherweise Code im AfterUpdate-Ereignis der Kombinationsbox, um den Link des „anderen“ Datensatzes auf den aktuellen Datensatz zu setzen und den alten Link (falls vorhanden) zu löschen. Dies ist nicht zwingend erforderlich – es bedeutet nur, dass der Benutzer die Zweiwegebeziehung andernfalls manuell pflegen müsste.