約 40 個のフィールドを持つシンプルなフラット データベースがあります。各レコードには一意の ID があります。
つながりが弱いレコードのペアがいくつかあるため、接続されたレコードに直接ジャンプできるように、各レコードにリンク/ブックマークを配置したいと思います。
これですかレコードからレコードへ単純なフラットデータベース構造内でリンクは可能ですか?
答え1
これにはいくつかの側面があり、多くの解決策が考えられます。
あなたが抱えている主な質問/目標は次のようです:
- 同じテーブル内の 2 つのレコード間のリンクを可能にするには、スキーマ (テーブル) はどのようになる必要がありますか?
- フォーム (単一ビュー) 上の 1 つのレコードから関連レコードにジャンプするにはどうすればよいですか?
レコードをリンクする方法はいくつかあります。最も簡単な方法は、おそらく同じテーブルの ID を含むテーブル上のフィールドです。欠点は、データが不整合になる可能性があることです。レコード 1 がレコード 2 にリンクしている場合、レコード 2 はレコード 1 にリンクする必要がありますか? おそらくそうでしょう。おそらく、それはあなたにとって問題ではないでしょう。
注: レコードのペア (つまり、2 つ以上のグループ) をリンクする必要がある場合、単純な自己参照フィールドは機能しません (それらを連鎖させない限り、ですが - 残念)。この場合、各グループの各要素のレコードを含む別のテーブルが必要です。レコードのペアと具体的に述べられているので、これは無視します。
したがって、 のような名前のフィールドをテーブルに追加しますRelatedItemID
。これは、テーブルの ID と同じデータ型の数値である必要があります。
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 イベントに、現在のレコードへの「その他の」レコードのリンクを設定し、古いリンク (ある場合) をクリアするコードを追加する必要があります。これは必須ではありません。そうでない場合は、ユーザーが双方向の関係を手動で維持する必要があることを意味します。