Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在Access中为最终用户创建动态“复选框”查询_Database_Ms Access - Fatal编程技术网

Database 在Access中为最终用户创建动态“复选框”查询

Database 在Access中为最终用户创建动态“复选框”查询,database,ms-access,Database,Ms Access,用例场景 我有一个低收入居民的客户。这些居民可以填写一张带有许多复选框的纸质表格 它有一个部分用于教育、文凭、助理等,另一个部分用于暖通空调、管道等技能 雇主接触我的客户,例如,要求他们所有接受过暖通空调培训的居民都有GED 现在,他们手动梳理纸质记录,寻找匹配项 迄今为止的解决办法 我正在用access数据库设置它们 我们有姓名、手机、电子邮件、地址等短字段 然后,我们会为纸质表单上显示的不同技能设置“是/否”框 我已经建立了一个表格和一个表格,客户员工在收到纸质副本后可以轻松填写 我的问题我

用例场景

我有一个低收入居民的客户。这些居民可以填写一张带有许多复选框的纸质表格

它有一个部分用于教育、文凭、助理等,另一个部分用于暖通空调、管道等技能

雇主接触我的客户,例如,要求他们所有接受过暖通空调培训的居民都有GED

现在,他们手动梳理纸质记录,寻找匹配项

迄今为止的解决办法

我正在用access数据库设置它们

我们有姓名、手机、电子邮件、地址等短字段

然后,我们会为纸质表单上显示的不同技能设置“是/否”框

我已经建立了一个表格和一个表格,客户员工在收到纸质副本后可以轻松填写

我的问题我需要你的帮助

我希望有一个动态查询,提示最终用户我的客户的员工简单地勾选一些框,并吐出居民的个人信息

例如,他们可以勾选HVAC,然后勾选GED,点击搜索按钮开始对是/否框的查询,并吐出符合他们检查的技能和教育的居民个人信息

我已经为每一项技能构建了单独的预先生成的静态查询,但是它很笨重,而且对用户不友好


在访问方面,我非常缺乏经验,如果你有培训材料youtube视频,操作网站,涵盖了这个确切的场景,我可以用它来解决。我认为我的问题是,我对access术语了解不够,无法正确搜索我想要查找的内容。

对于这个简单的情况,您只想按是/否列进行筛选,不必使用VBA。不过,它更灵活,也许更高效

创建一个搜索表单,我们称之为frmSearch,其中包含所有技能的未绑定复选框chkHVAC、chkGED等

然后,您可以使用一个包含所有技能的查询,使用布尔逻辑:

如果未选中该复选框chkHVAC=False,则无论该字段是true还是False,都不会过滤返回的记录。 如果选中,则只返回字段为True的记录。 像这样。[HVAC]和[GED]是表列

挑选* 从myTable 表格在哪里!frmSearch!chkHVAC=假或[HVAC]=真 还有表格!frmSearch!chkGED=False或[GED]=True 和等 您可以在搜索表单上放置一个按钮,打开查询,如果已经打开,则可能会关闭查询:

DoCmd.Close acQuery,myQuery DoCmd.openquerymyquery
对于这个简单的情况,您只想按是/否列进行筛选,而不必使用VBA。不过,它更灵活,也许更高效

创建一个搜索表单,我们称之为frmSearch,其中包含所有技能的未绑定复选框chkHVAC、chkGED等

然后,您可以使用一个包含所有技能的查询,使用布尔逻辑:

如果未选中该复选框chkHVAC=False,则无论该字段是true还是False,都不会过滤返回的记录。 如果选中,则只返回字段为True的记录。 像这样。[HVAC]和[GED]是表列

挑选* 从myTable 表格在哪里!frmSearch!chkHVAC=假或[HVAC]=真 还有表格!frmSearch!chkGED=False或[GED]=True 和等 您可以在搜索表单上放置一个按钮,打开查询,如果已经打开,则可能会关闭查询:

DoCmd.Close acQuery,myQuery DoCmd.openquerymyquery 更明确地说: 我们从如下表结构开始:

然后我们创建一个搜索表单,这样数据库用户就不必学习使用access。

接下来,用户从表单中选择一些技能和教育水平的组合,并点击按钮触发按钮单击事件。

单击某些消息框后,用户会得到: 我无法从互联网上获取本应作为数据表打开查询的代码,因此我创建并打开了一个临时表。我觉得这还可以,因为这是一个错误的方法,不管怎样,在以后的时间里。以下是按钮单击事件背后的代码,该事件为所选教育和技能的每个组合创建sql字符串:

Private Sub SearchForSkillsButton_Click()
'listboxes are better for this application.  do not have to add new checkboxes and code every time some client has a new skill.
Dim sqlstring As String
sqlstring = BuildBaseSQLStringandFilterBySkills
sqlstring = AddEducationLevelFilters(sqlstring)
OpenandDisplayTable sqlstring
End Sub

Public Function BuildBaseSQLStringandFilterBySkills() As String
Dim sqlquerystring As String
Dim item As Variant
sqlquerystring = "SELECT [Clients].[FirstName], [Clients].[LastName] INTO SearchResultsTable " & _
"FROM Skills INNER JOIN (EducationLevels INNER JOIN ((Clients INNER JOIN ClientEducation ON Clients.ClientsID = ClientEducation.ClientID) INNER JOIN ClientSkills ON Clients.ClientsID = ClientSkills.ClientID) ON EducationLevels.EducationID = ClientEducation.EducationLevelID) ON Skills.SkillID = ClientSkills.SkillsID"
Dim firstitem As Boolean
firstitem = True
For Each item In SelectMultipleSkillsListBox.ItemsSelected
If firstitem = True Then
firstitem = False
sqlquerystring = sqlquerystring & " Where ([Skills].[SkillID] = " & SelectMultipleSkillsListBox.ItemData(item)
Else
sqlquerystring = sqlquerystring & " AND [Skills].[SkillID] = " & SelectMultipleSkillsListBox.ItemData(item)
End If
Next item
BuildBaseSQLStringandFilterBySkills = sqlquerystring
End Function

Public Function AddEducationLevelFilters(filterstring As String) As String
If Me.CheckBoxGED = True Then
filterstring = filterstring & " AND [ClientEducation].[EducationLevelID] = 1 "
End If
If Me.CheckBoxHighSchool = True Then
filterstring = filterstring & " AND [ClientEducation].[EducationLevelID] = 2 "
End If
If Me.CheckBoxSomeCollege = True Then
filterstring = filterstring & " AND [ClientEducation].[EducationLevelID] = 2 "
End If
filterstring = filterstring & ")"
AddEducationLevelFilters = filterstring
End Function

Public Sub OpenandDisplayTable(sqlstring As String)
DoCmd.RunSQL (sqlstring)
DoCmd.OpenTable ("SearchResultsTable")
End Sub

以下是有关制作access搜索表单的长教程的链接: 通常,您还可以将查询转换为具有可打印优点的报告: 更明确地说: 我们从如下表结构开始:

然后我们创建一个搜索表单,这样数据库用户就不必学习使用access。

接下来,用户从表单中选择一些技能和教育水平的组合,并点击按钮触发按钮单击事件。

单击某些消息框后,用户会得到: 我无法从互联网上获取本应作为数据表打开查询的代码,因此我创建并打开了一个临时表。我觉得这还可以 无论如何,这是错误的方法,以后再说吧。以下是按钮单击事件背后的代码,该事件为所选教育和技能的每个组合创建sql字符串:

Private Sub SearchForSkillsButton_Click()
'listboxes are better for this application.  do not have to add new checkboxes and code every time some client has a new skill.
Dim sqlstring As String
sqlstring = BuildBaseSQLStringandFilterBySkills
sqlstring = AddEducationLevelFilters(sqlstring)
OpenandDisplayTable sqlstring
End Sub

Public Function BuildBaseSQLStringandFilterBySkills() As String
Dim sqlquerystring As String
Dim item As Variant
sqlquerystring = "SELECT [Clients].[FirstName], [Clients].[LastName] INTO SearchResultsTable " & _
"FROM Skills INNER JOIN (EducationLevels INNER JOIN ((Clients INNER JOIN ClientEducation ON Clients.ClientsID = ClientEducation.ClientID) INNER JOIN ClientSkills ON Clients.ClientsID = ClientSkills.ClientID) ON EducationLevels.EducationID = ClientEducation.EducationLevelID) ON Skills.SkillID = ClientSkills.SkillsID"
Dim firstitem As Boolean
firstitem = True
For Each item In SelectMultipleSkillsListBox.ItemsSelected
If firstitem = True Then
firstitem = False
sqlquerystring = sqlquerystring & " Where ([Skills].[SkillID] = " & SelectMultipleSkillsListBox.ItemData(item)
Else
sqlquerystring = sqlquerystring & " AND [Skills].[SkillID] = " & SelectMultipleSkillsListBox.ItemData(item)
End If
Next item
BuildBaseSQLStringandFilterBySkills = sqlquerystring
End Function

Public Function AddEducationLevelFilters(filterstring As String) As String
If Me.CheckBoxGED = True Then
filterstring = filterstring & " AND [ClientEducation].[EducationLevelID] = 1 "
End If
If Me.CheckBoxHighSchool = True Then
filterstring = filterstring & " AND [ClientEducation].[EducationLevelID] = 2 "
End If
If Me.CheckBoxSomeCollege = True Then
filterstring = filterstring & " AND [ClientEducation].[EducationLevelID] = 2 "
End If
filterstring = filterstring & ")"
AddEducationLevelFilters = filterstring
End Function

Public Sub OpenandDisplayTable(sqlstring As String)
DoCmd.RunSQL (sqlstring)
DoCmd.OpenTable ("SearchResultsTable")
End Sub

以下是有关制作access搜索表单的长教程的链接: 通常,您还可以将查询转换为具有可打印优点的报告:

您需要一个表单,用户可以在其中选择这些条件,然后使用VBA代码构建过滤器并应用于表单或报表。回顾您的问题太广泛,不适合SO。到目前为止您尝试了什么?您需要一个表单,用户可以在其中选择这些条件,然后使用VBA代码构建筛选器并应用于表单或报表。回顾你的问题实在太宽泛了,不适合这么说。到目前为止你都试了些什么?酷豆!因此,1创建表单,2个用于所有教育和技能的复选框3然后,基于表单中的bits检查,使用您给我的逻辑进行查询,将知道只查询选中的值。我看看我能做什么!我不知道如何构建查询,也不知道如何/在何处进行查询,但我可以找到答案。我会告诉你发生了什么!谢谢你。这是一个静态的查询,就像你已经建立的查询一样,但是它根据复选框动态地涵盖了所有技能。如果你添加了新技能,你只需要编辑它。现在就开始吧!这周我遇到了一些紧急的VPN问题,这让我失去了注意力,道歉。实际上,我遇到了一个奇怪的问题。这可能是我这边的问题。我的表单有最终用户填写的复选框。复选框有三个可能的值出于某种原因我只希望有两个?它们被填满,检查过,并且是空的。如果复选框为空,查询将提示用户输入文本。我需要对我的表单进行故障排除,我认为它运行成功!现在我只需要弄清楚如何让它实际显示结果……我使用GUI进行静态查询。酷豆!因此,1创建表单,2个用于所有教育和技能的复选框3然后,基于表单中的bits检查,使用您给我的逻辑进行查询,将知道只查询选中的值。我看看我能做什么!我不知道如何构建查询,也不知道如何/在何处进行查询,但我可以找到答案。我会告诉你发生了什么!谢谢你。这是一个静态的查询,就像你已经建立的查询一样,但是它根据复选框动态地涵盖了所有技能。如果你添加了新技能,你只需要编辑它。现在就开始吧!这周我遇到了一些紧急的VPN问题,这让我失去了注意力,道歉。实际上,我遇到了一个奇怪的问题。这可能是我这边的问题。我的表单有最终用户填写的复选框。复选框有三个可能的值出于某种原因我只希望有两个?它们被填满,检查过,并且是空的。如果复选框为空,查询将提示用户输入文本。我需要对我的表单进行故障排除,我认为它运行成功!现在我只需要弄清楚如何让它实际显示结果……我使用GUI进行静态查询。对不起,我本想举一个设计更为正确的搜索表单的例子,但我的访问权限被窃听得太厉害了,我不得不重新安装它。我非常感谢您为此付出的时间和努力,谢谢。很抱歉,我本想举一个设计更正确的搜索表单的例子,但我的访问被窃听得太厉害了,我不得不重新安装它。我非常感谢您为此付出的时间和努力,谢谢。