2016-11-21 16 views
0

私はテーブルを3つリンクしたいと思っています。これを行うことは不可能であると認識しましたので、VBAで行う方法を見つけることにしました。私は、私は全く分からないが、何Option Compare Database手段を持って、私は本当に仕事を願っていますし、それは私が前に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 

私の特定のニーズに合わせて動作させるために、それを編集してきたいくつかのコードをつかんで、それがでしたちょうどそこに。私はそれが何であるか混乱していますが、私はサブルーチンが必要であると確信しています。

セルPlayers.Condの値が変更されるたびにこの機能をどのように実行できるか教えてもらえますか?

+0

[docs.SOのOptionキーワード](http://stackoverflow.com/documentation/vba/3992/vba-option -keyword/13937/option-compare-binary-text-database#t = 20161121223654120041) –

+3

データ値に基づいてDB関係を定期的に変更しないでください。テーブルの関係はデータベースの構造的完全性を維持し、データベース設計期間中に一度だけ調整する必要があります。そうでなければ、アプリケーションロジックとレコード管理を壊すことができます。 – Parfait

答えて

0

どのようにすべての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) 
関連する問題