参考ページ:Access_VBA講座

01.主テーブル・リレーションテーブル

 1対多リレーションシップの「1」側のテーブルを主テーブル,また,「多」側のテーブルをリレーションテーブルといいます。右の例では「2000」がリレーションテーブル,「クラス担任」が主テーブルです。


02.リレーションシップの削除

次の例はVBで上のリレーションシップを削除します。

Private Sub 削除_Click()
Dim m As String
Dim S As String

'リレーションシップ削除

m = "クラス担任"
S = "2000"
Call D_relation(m, S)

End Sub

削除ボタンをフォーム上に作成して、そのボタンを押すと、Private Sub 削除が動く。

Call D_relation(m,S)

で下の Sub D_relation(T_main As String, T_sub As String)
が動く。


'リレーションシップの削除
Sub D_relation(T_main As String, T_sub As String)
  ’T_main 主テーブの名前
  ’T_sub  リレーションテーブルの名前
Dim DB As DAO.Database
Dim rel As DAO.Relation
Set DB = CurrentDb

For Each rel In DB.Relations
If rel.Table = T_main And rel.ForeignTable = T_sub Then
DB.Relations.Delete rel.Name
MsgBox "削除しました"
Exit Sub
End If
Next rel
End Sub
pageTop




03.リレーションシップの作成

 次の例はVBで上のリレーションシップを作成します。

これも削除と同様に、「作成」ボタンを作って、プロパティのイベント>クリック時にPrivateを書く。
そしてモジュールにC_relation(T_main As String, T_sub As String, K_main As String, K_sub As String)を書く。



Private Sub 作成_Click()
  Dim m As String
  Dim s As String
  Dim k As String
  Dim l As String

m = "クラス担任"
s = "2000"
k = "現在クラス"
l = "現在クラス"

Call C_relation(m, s, l, k)

End Sub

’リレーションシップの作成
Sub C_relation(T_main As String, T_sub As String, K_main As String, K_sub As String)
  ’T_main 主テーブル
  ’T_sub  リレーションテーブル
' K_main 主テーブル側のフィールド名
  ’K_sub リレーションテーブル側のフィールド名
Dim db As Database
Dim fld As Field
Dim rel As Relation

Set db = CurrentDb
Set rel = db.CreateRelation(K_main, T_main, T_sub)
rel.Attributes = dbRelationDeleteCascade + dbRelationUpdateCascade
Set fld = rel.CreateField(K_sub)
fld.ForeignName = K_sub
rel.Fields.Append fld
db.Relations.Append rel
Set db = Nothing
End Sub