如何将多个值传递给Access中的参数?

背景/总体目标

  • 我有一个Excel电子表格,列出了某些angular色需要testing的项目。
    • angular色有成员
    • angular色可以有成员angular色,它们有自己的用户。
  • 我需要获取可以testing给定function的用户总数,以获取某些指标的名称和计数。
  • 我将用户,angular色和成员angular色放入Access数据库中进行快速查询
  • 现在,只是试图获得正确的信息。 我不介意进入一个angular色列表,让它回吐这样的事情。
  • 我想避免将每个angular色的所有testing项目都添加到数据库中(有很多这些testing项目应该是一个相当快的任务)。

数据库结构

+---------------+ +------------+ |RolesUsers | |Roles | |---------------| +---------------+ |+-----------| |ID | |Users | +-+|ID |+---+|RoleID | |---------------| | |RoleName | |UserID |+--+|ID | | +------------+ +---------------+ |UserName | | +---------------+ | | +-----------------+ | |RolesMemberRoles | | |-----------------| | |ID | +-+|RoleID | +-+|MemberRoleID | +-----------------+ 

目标

  • 将angular色列表传递给查询(通过列出的参数或string列表)
  • 返回属于这些angular色或其任何成员angular色的唯一用户的计数
  • 快速和肮脏 – 不一定是幻想

当前访问查询

  • 返回属于通过参数input的给定angular色的angular色或其成员angular色的用户
 PARAMETERS p_RoleName Text ( 255 ); SELECT Roles.RoleName, Users.UserName FROM (RolesUsers INNER JOIN Users ON RolesUsers.UserID = Users.ID) INNER JOIN Roles ON RolesUsers.RoleID = Roles.ID Where RolesUsers.RoleID In (Select ID from Roles where Roles.RoleName = p_RoleName) UNION SELECT Roles.RoleName, Users.UserName FROM (RolesUsers INNER JOIN Users ON RolesUsers.UserID = Users.ID) INNER JOIN Roles ON RolesUsers.RoleID = Roles.ID Where RolesUsers.RoleID IN ( SELECT RolesSubroles.SubRoleID FROM RolesSubroles INNER JOIN Roles ON RolesSubRoles.RoleID = Roles.ID where Roles.RoleName = p_RoleName); 

至今的想法

  • find一个有趣的文章 ,介绍如何使用Instr()将一个文本string传递给where子句。 不知道如何我可以一定调整,但我的情况。

要实现目标1,可以使用Remou上面的build议,使用以下查询将RoleName列表键入到WHERE子句中。 但是,删除“WHERE”子句,运行查询,然后粘贴到Excel中(目标3)“快速和肮脏”过滤可能更有意义。

 SELECT DISTINCT Roles_1.RoleName, Users.UserName FROM Users INNER JOIN ((Roles INNER JOIN (RolesMemberRoles INNER JOIN Roles AS Roles_1 ON RolesMemberRoles.MemberRoleID = Roles_1.ID) ON Roles.ID = RolesMemberRoles.RoleID) INNER JOIN RoleUsers ON Roles.ID = RoleUsers.RoleID) ON Users.ID = RoleUsers.UserID WHERE Roles_1.RoleName In ( "Prez", "Veep", "Staffer" ) ORDER BY Roles_1.RoleName, Users.UserName; 

要返回能够履行各种angular色(目标2)的用户数,您可以运行以下操作。

 SELECT InheritedRoles.RoleName, Count(*) AS NumOfTestersAvailable FROM (SELECT DISTINCT Roles_1.RoleName, Users.UserName FROM Users INNER JOIN ((Roles INNER JOIN (RolesMemberRoles INNER JOIN Roles AS Roles_1 ON RolesMemberRoles.MemberRoleID = Roles_1.ID) ON Roles.ID = RolesMemberRoles.RoleID) INNER JOIN RoleUsers ON Roles.ID = RoleUsers.RoleID) ON Users.ID = RoleUsers.UserID) AS InheritedRoles GROUP BY InheritedRoles.RoleName ORDER BY InheritedRoles.RoleName; 

上面的SQL假定每个Role都包含在RoleMemberRoles表中的成员身份。 您应该使用DISTINCT因为数据模型不会阻止单个用户拥有多个angular色,因此在每个结果集中都会出现多次。

build议:在您的Access项目中,使用Access SQL查询电子表格数据,例如可能使用内衬表格在Access表格和Excel数据之间创buildJOIN