参考ページ: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
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