MS Access VBA选择查询

1 sql database ms-access vba

所以首先抱歉我的英语,我的母语是德语.

我有一个带有几个表的访问数据库,数据库中充满了愈合植物,并且有一个名为"问题"的表看起来像这样:

专栏:ID - 姓名 - 头痛 - 疼痛 - 呕吐 - 依此类推......

并且像头痛等指示的列是布尔 - 真或假.

现在我想询问用户(使用表格左右的列表框或文本输入)来告诉他的指示,然后应该有一个物质/工厂列表,其中指示的值(ColumnName)为true.

我认为这是列表中搜索的参数.

Dar*_*ook 5

我会看一下你的数据库的设计.如果另一个问题变得明显,那么在每个问题上都有一个包含单独列的表将是一个非常令人头疼的问

我可能会使用四个表格:

  • 用户:UserID(AutoNum,PK),用户名(文本)
    在此输入图像描述
  • 植物:PlantID(AutoNum,PK),PlantName(Text)
    在此输入图像描述
  • IssueList:IssueID(AutoNum,PK),IssueDescription(Text)
    在此输入图像描述
  • User_Issues:UserID(Num,PK),PlantID(Num,PK),IssueID(Num,PK),HasIssue(布尔)
    在此输入图像描述

User_Issues表有由来自其他表的每个标识符的复合键-这将确保用户不能有一个工厂同一个问题不止一次.

创建新用户时,将运行查询以更新User_Issues表:

INSERT INTO User_Issue(PlantID, IssueID, UserID)
SELECT      PlantID, IssueID, UserID
FROM        Plants, IssueList, Users
WHERE       UserName = "Darren"
Run Code Online (Sandbox Code Playgroud)

这将为工厂创建一个笛卡尔积,并为每个用户提供问题.因此,例如,如果您有两个工厂和三个问题,您将获得2x3记录 - 两个工厂可能有6个问题.
在此输入图像描述

此SQL将允许您分配问题:

SELECT        UserName
            , PlantName
            , IssueDesc
            , HasIssue
FROM        ((
             User_Issue INNER JOIN Users ON User_Issue.UserID = Users.UserID)
                        INNER JOIN Plants ON User_Issue.PlantID = Plants.PlantID)
                        INNER JOIN IssueList ON User_Issue.IssueID = IssueList.IssueID
ORDER BY    PlantName, IssueDesc
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

要查看您必须添加WHERE HasIssue 到上述SQL的问题.

SELECT        UserName
            , PlantName
            , IssueDesc
            , HasIssue
FROM        ((
             User_Issue INNER JOIN Users ON User_Issue.UserID = Users.UserID)
                        INNER JOIN Plants ON User_Issue.PlantID = Plants.PlantID)
                        INNER JOIN IssueList ON User_Issue.IssueID = IssueList.IssueID
WHERE       HasIssue
ORDER BY    PlantName, IssueDesc
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述