【发布时间】:2015-09-12 13:26:40
【问题描述】:
构建我的第一个 Microsoft Access SQL 查询。这不应该这么难!
我有 2 张桌子:
属于GroupA 的用户已登录。我只想向他显示GroupA 分配到的那些Data 表行和列,如下所示:
+--------+--------+--------+
| Group | Data3 | Data4 |
+--------+--------+--------+
| GroupA | 9 | 4 |
| GroupA | 1 | 5 |
+--------+--------+--------+
我尝试了这个愚蠢的选择:
SELECT (select Data from AccessRights where GroupA = "y")
FROM Data
WHERE Data.Group = "GroupA";
【问题讨论】:
-
那么,您能否告诉我们答案必须满足哪些标准才能被您接受为答案?如果您需要运行 VBA 代码来解决问题,或者您只是与查询设计器一起工作,您是否可以接受?
-
我宁愿只在 SQL 中进行。但是如果不改变我的数据结构似乎是不可能的。所以VBA也不错。
-
这个问题的根源在于架构。我不确定您要解决什么问题,但此表/列设计并不好。这就是您遇到 SQL 问题的原因。如果将“y”分配给 AccessRights 表的 GroupA 和 GroupB 列中的所有值会发生什么?我认为您正在尝试构建的是基于角色的身份验证系统。为此,您的表格会有所不同。
-
@itsben - 你完全正确地理解了我正在尝试构建的内容。但我不知道应该如何设计表格。所以我只是即兴创作并以此为基础。如果您有任何关于表在基于角色的身份验证系统中的外观的良好参考/示例,我很乐意了解它。但至少现在我拥有我所拥有的。我已经实现了一个 SQL-VBA 解决方案来完成这项任务。和what was offered by shA.t很像
-
这种手工构建的身份验证系统有一个常见的陷阱,新 Access 用户通常不知道:用户可以轻松绕过您的保护。例如,他们可以在启动 Access 时按 SHIFT 以绕过您的启动代码并让所有数据库对象可用。您可以通过 Access 设置和程序代码来保护自己免受这种情况的影响,但任何用户仍然可以在没有您的应用程序的情况下启动 Access(然后获得所有可用数据)。因此,如果您需要真正的安全性,请至少使用 Access 提供的身份验证系统(遗憾的是不能保护单个列)。