根据Access中的字段值更改关系
问题描述:
我有一张表,我想链接其他三张表,我意识到这是不可能的,因此我决定找到一种方法来处理VBA。我抓住了一些代码,我真的希望将工作,并已编辑它,使之与我的具体需求根据Access中的字段值更改关系
Option Compare Database
Function changeRel()
If Players.Cond = "Quest" Then
Dim dbs As DAO.Database
Dim rel As DAO.Relation
Set dbs = CurrentDb
Set rel = dbs.CreateRelation("QuestRel", "Players", "Player Quests", dbRelationDeleteCascade)
rel.Fields.Append rel.CreateField("PlayerID")
rel.Fields("PlayerID").ForeignName = "PQuestID"
dbs.Relations.Append rel
dbs.Relations.Refresh
ElseIf Players.Cond = "Level" Then
Dim dbs As DAO.Database
Dim rel As DAO.Relation
Set dbs = CurrentDb
Set rel = dbs.CreateRelation("LevelRel", "Players", "Player Levels", dbRelationDeleteCascade)
rel.Fields.Append rel.CreateField("PlayerID")
rel.Fields("PlayerID").ForeignName = "PLevelID"
dbs.Relations.Append rel
dbs.Relations.Refresh
ElseIf Players.Cond = "Stat" Then
Dim dbs As DAO.Database
Dim rel As DAO.Relation
Set dbs = CurrentDb
Set rel = dbs.CreateRelation("StatRel", "Players", "Player Stats", dbRelationDeleteCascade)
rel.Fields.Append rel.CreateField("PlayerID")
rel.Fields("PlayerID").ForeignName = "PStatsID"
dbs.Relations.Append rel
dbs.Relations.Refresh
Else
'Do nothing
End Function
我从来没有在VBA之前编码工作,我不知道是什么Option Compare Database
手段,它是就在那里。我很确定我需要一个子程序,尽管我对它是什么感到困惑。
有人能告诉我如何在每次单元格Players.Cond
的值发生变化时运行此函数吗?
答
如何像这样从所有4台拉相关数据:
SELECT Players.PlayerID, [Player Quests].PQuestID, [Player Levels].PLevelID, [Player Stats].PStatsID
FROM (((Players
LEFT JOIN [Player Quests] ON Players.PlayerID = [Player Quests].PQuestID)
LEFT JOIN [Player Levels] ON Players.PlayerID = [Player Levels].PLevelID)
LEFT JOIN [Player Stats] ON Players.PlayerID = [Player Stats].PStatsID)
[上docs.SO选项关键字(http://stackoverflow.com/documentation/vba/3992/vba-option -keyword/13937/option-compare-binary-text-database#t = 20161121223654120041) –
您不应该根据数据值定期更改数据库关系。表关系维护数据库的结构完整性,并应在数据库设计期间仅调整一次。否则你可能会破坏很多应用程序逻辑和记录管理。 – Parfait