基于用户输入访问权限的SQL动态查询问题
我有一张表格,基于用户输入访问权限的SQL动态查询问题,sql,ms-access,Sql,Ms Access,我有一张表格,联系信息 我有一个供用户输入的表单,frmSearch 我有一个问题的主题,frmSearchQuery 表中有关于居民的数据,包括第一、最后、电话、电子邮件、地址等。以及大约25种混合教育和技能 用例 我的想法是,我的客户可以用一种傻瓜式的方式勾选一些方框,它会把那些掌握了选定技能的居民吐出来,然后他们可以提供给潜在雇主(第8节/低收入住房,我的客户试图帮助他们的居民找到稳定的工作) 示例用例是我选择GED和HVAC,并列出所有具有GED和HVAC经验的居民 我有一个SQL查
联系信息
我有一个供用户输入的表单,frmSearch
我有一个问题的主题,frmSearchQuery
表中有关于居民的数据,包括第一、最后、电话、电子邮件、地址等。以及大约25种混合教育和技能
用例 我的想法是,我的客户可以用一种傻瓜式的方式勾选一些方框,它会把那些掌握了选定技能的居民吐出来,然后他们可以提供给潜在雇主(第8节/低收入住房,我的客户试图帮助他们的居民找到稳定的工作) 示例用例是我选择
GED
和HVAC
,并列出所有具有GED和HVAC经验的居民
我有一个SQL查询,它显然不能按照我想要的方式工作,我正在绞尽脑汁思考如何编写它,这样基本上如果在form=true和
resident skill=true
上选择了skill,那么它将匹配查询参数
使用下面的代码,我离目标有多近
SELECT *
FROM [Contact Info]
WHERE (Forms!frmSearch!chk_someschool = True AND [Some School] = True)
AND (Forms!frmSearch!chk_ged = True AND [GED] = True)
AND (Forms!frmSearch!chk_highschool = True AND [High School Diploma] = True)
AND (Forms!frmSearch!chk_somecollege = True AND [Some College] = True)
AND (Forms!frmSearch!chk_certificate = True AND [Certificate] = True)
AND (Forms!frmSearch!chk_associates = True AND [Associate Degree] = True)
AND (Forms!frmSearch!chk_bachelors = True AND [Bachelor Degree] = True)
AND (Forms!frmSearch!chk_masters = True AND [Masters Degree] = True)
AND (Forms!frmSearch!chk_accounting = True AND [Accounting/Bookeeping] = True)
AND (Forms!frmSearch!chk_admin = True AND [Administrative/Clerical/Office Training] = True)
AND (Forms!frmSearch!chk_computer = True AND [Computer Skills] = True)
AND (Forms!frmSearch!chk_plumbing = True AND [Plumbing] = True)
AND (Forms!frmSearch!chk_concrete = True AND [Concrete Finishing] = True)
AND (Forms!frmSearch!chk_groundskeeping = True AND [Grounds Keeping] = True)
AND (Forms!frmSearch!chk_HVAC = True AND [HVAC] = True)
AND (Forms!frmSearch!chk_casemanagement = True AND [Case Management] = True)
AND (Forms!frmSearch!chk_roofer = True AND [Roofer] = True)
AND (Forms!frmSearch!chk_carpentry = True AND [Carpentry] = True)
AND (Forms!frmSearch!chk_electrical = True AND [Electrical] = True)
AND (Forms!frmSearch!chk_bricklayer = True AND [Brick Layer] = True)
AND (Forms!frmSearch!chk_receptionist = True AND [Receptionist] = True)
AND (Forms!frmSearch!chk_heavyequipment = True AND [Heavy Equipment Operation] = True)
AND (Forms!frmSearch!chk_painting = True AND [Painting] = True)
AND (Forms!frmSearch!chk_drywall = True AND [Dry Wall Installation] = True)
AND (Forms!frmSearch!chk_sheetmetal = True AND [Sheet Metal Work] = True);
编辑
@安德烈实际上在早些时候帮了我,下面是,但它只匹配每一个被检查的技能/教育的居民。我试图搞乱布尔值,看看是否得到不同的结果,但忘记粘贴提供给我的原始语句
SELECT *
FROM [Contact Info]
WHERE (Forms!frmSearch!chk_someschool = False OR [Some School] = True)
AND (Forms!frmSearch!chk_ged = False OR [GED] = True)
AND (Forms!frmSearch!chk_highschool = False OR [High School Diploma] = True)
AND (Forms!frmSearch!chk_somecollege = False OR [Some College] = True)
AND (Forms!frmSearch!chk_certificate = False OR [Certificate] = True)
AND (Forms!frmSearch!chk_associates = False OR [Associate Degree] = True)
AND (Forms!frmSearch!chk_bachelors = False OR [Bachelor Degree] = True)
AND (Forms!frmSearch!chk_masters = False OR [Masters Degree] = True)
AND (Forms!frmSearch!chk_accounting = False OR [Accounting/Bookeeping] = True)
AND (Forms!frmSearch!chk_admin = False OR [Administrative/Clerical/Office Training] = True)
AND (Forms!frmSearch!chk_computer = False OR [Computer Skills] = True)
AND (Forms!frmSearch!chk_plumbing = False OR [Plumbing] = True)
AND (Forms!frmSearch!chk_concrete = False OR [Concrete Finishing] = True)
AND (Forms!frmSearch!chk_groundskeeping = False OR [Grounds Keeping] = True)
AND (Forms!frmSearch!chk_HVAC = False OR [HVAC] = True)
AND (Forms!frmSearch!chk_casemanagement = False OR [Case Management] = True)
AND (Forms!frmSearch!chk_roofer = False OR [Roofer] = True)
AND (Forms!frmSearch!chk_carpentry = False OR [Carpentry] = True)
AND (Forms!frmSearch!chk_electrical = False OR [Electrical] = True)
AND (Forms!frmSearch!chk_bricklayer = False OR [Brick Layer] = True)
AND (Forms!frmSearch!chk_receptionist = False OR [Receptionist] = True)
AND (Forms!frmSearch!chk_heavyequipment = False OR [Heavy Equipment Operation] = True)
AND (Forms!frmSearch!chk_painting = False OR [Painting] = True)
AND (Forms!frmSearch!chk_drywall = False OR [Dry Wall Installation] = True)
AND (Forms!frmSearch!chk_sheetmetal = False OR [Sheet Metal Work] = True);
编辑2:
这是表格。默认状态false,三重状态编号。
一切都没有检查。不管我在这个表格中检查了什么,因为结果总是一样的
当我运行它时,我只得到一个结果,一个所有内容都设置为check(设置为TRUE)的伪条目。
不知道为什么!这是我第一次编辑下的查询
如果我尝试在只勾选“Associates Degree”的情况下运行搜索,我应该会得到三个结果。两个实际条目有一个Associates和我的虚拟条目,但是,只有虚拟条目显示。正如我在原稿中所写,逻辑只有在每个技能的子句中包含或时才有效
此外,搜索框的复选框必须为FALSE,而不是TRUE
SELECT *
FROM [Contact Info]
WHERE (Forms!frmSearch!chk_someschool = False OR [Some School] = True)
AND (Forms!frmSearch!chk_ged = False OR [GED] = True)
AND (...
^ ^
| |
也许它有助于理解逻辑,将其颠倒过来:
布尔逻辑表示:(A或B)==not(非A和非B)
i、 e.您不想列出记录,您在其中搜索某项技能,而此人不具备该技能
i、 e
编辑:事实证明,在查询和表单中,有两个复选框的名称不同
Form: chk__concrete
Query: chk_concrete
Form: chk_carpet
Query: chk_carpentry
Access在运行查询时不请求这些参数,这有点令人恼火。相反(我猜)它会默默地将其视为NULL,而这些子句不起作用
在表单设计中更正这些复选框名称,查询就会起作用。此外,列出的“技能”确实有点无处不在,但这正是客户想要的,这些都是提供给所有居民的纸质清单上列出的技能。使用多个表示相同类型数据的是/否字段不是标准化结构,尝试应用筛选标准总是会失败。但是“不完全按照我想要的方式工作”是什么意思?输出有什么问题?@June7,只是我当前的SQL查询与我想要的结果不匹配。我不熟悉SQL和Access(显然是哈哈!),也不理解规范化结构的含义。我的客户有一群住院医生,他们要么有(正确的)特定技能,要么没有(错误的)。为什么复选框不适用于真/假值?您应该研究“规范化”。我并没有说true/false复选框有任何错误,我说非规范化数据结构的多个yes/no字段在尝试过滤时会令人沮丧。另外,我不使用动态参数化查询-我使用VBA构建筛选条件并应用于表单或报表。对!我尝试了你最初建议的方法,但唯一能匹配桌子上的东西的方法是,如果我做了一个检查了所有技能/教育的虚拟居民。表单的内容(true或false)无关紧要,它将始终显示一个虚拟驻留。确保所有复选框都有DefaultValue=false
和TripleState=false
。那么它一定会起作用@Ghawblin很好奇。一切似乎都是正确的。你能复制你的数据库,删除所有的个人信息(只需在其中留下2-3条测试记录),压缩并压缩它,然后像这样上传到文件宿主,这样我就可以看一看了吗@加布林威尔。此方法仅在查询中的所有控件名称实际存在时有效,请参见编辑。我没有单词。我是世界上最大的狗。你帮了我度过了大部分时间,非常感谢。在这一点上,我只需要建立了前端更多,所以它看起来不错。我很尴尬,我需要这么多的人手,但我更聪明。我希望你有一个美好的假期,非常感谢你。这个项目将帮助我所在社区的许多人。这是为当地住房管理局,需要政府援助生活的人准备的。我吃得太多了。我从事网络安全工作,根本不使用SQL。非常感谢。
Form: chk__concrete
Query: chk_concrete
Form: chk_carpet
Query: chk_carpentry