Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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
Ms access Access VBA:与我一起重复更改表单筛选器。筛选器_Ms Access_Vba - Fatal编程技术网

Ms access Access VBA:与我一起重复更改表单筛选器。筛选器

Ms access Access VBA:与我一起重复更改表单筛选器。筛选器,ms-access,vba,Ms Access,Vba,Access中的过滤器似乎“粘滞”——当您使用VBA设置一个过滤器时,您可以删除它,但不能设置其他过滤器 我有一个用于跟踪学生成绩的Access数据库。它有表科目,教师,学生,测试和测试结果。每个成绩记录涉及一名学生和一次考试 我有一个显示测试的表单,还有一个子表单显示结果。我想使用各种条件搜索测试,所以我在(外部)表单标题中添加了一些未绑定的字段,并将它们标记为“名称”、“主题”、“开始日期”、“结束日期”和“教师”。我添加了一个“过滤器”按钮和一个“重置”按钮。每个搜索字段都是可选的,因此可

Access中的过滤器似乎“粘滞”——当您使用VBA设置一个过滤器时,您可以删除它,但不能设置其他过滤器

我有一个用于跟踪学生成绩的Access数据库。它有表
科目
教师
学生
测试
测试结果
。每个成绩记录涉及一名学生和一次考试

我有一个显示测试的表单,还有一个子表单显示结果。我想使用各种条件搜索测试,所以我在(外部)表单标题中添加了一些未绑定的字段,并将它们标记为“名称”、“主题”、“开始日期”、“结束日期”和“教师”。我添加了一个“过滤器”按钮和一个“重置”按钮。每个搜索字段都是可选的,因此可以使用任何组合:任何留空都将被忽略

这是过滤器按钮的代码:

Me.Filter=
“([Forms]![testWithResults]![Text102]为空,或者测试名称类似于“*”&[Forms]![testWithResults]![Text102]&“*”)
和([Forms]![testWithResults]![Combo89]为空或教师=[Forms]![testWithResults]![Combo89])
和([Forms]![testWithResults]![Combo52]为空或subject=[Forms]![testWithResults]![Combo52])
和([Forms]![testWithResults]![Text83]为空或[Forms]![testWithResults]![Text85]为空或测试日期介于[Forms]![testWithResults]![Text83]和[Forms]![testWithResults]![Text85])”
Me.FilterOn=正确
这是复位按钮的代码:

Me.FilterOn=False
Me.Combo89=Me.Combo89.DefaultValue
Me.Combo52=Me.Combo52.DefaultValue
Me.Text83=Me.Text83.DefaultValue
Me.Text85=Me.Text85.DefaultValue
Me.Text102=Me.Text102.DefaultValue
当我第一次加载表单时,我第一次搜索表单时,所有内容都能正常工作。筛选按钮的工作方式与预期一致,重置按钮清空所有字段并显示所有记录但当我尝试使用新条件再次搜索时,我只会再次得到我的旧结果。要使其正常工作,我必须关闭并重新打开表单


当我将
Me.Filter
替换为
DoCmd.ApplyFilter
时,它第一次仍然工作得很好,但第二次我会得到一个错误“表达式太复杂,无法计算”。

由于Access抱怨
过滤器
字符串太复杂,请简化它

您希望将
过滤器
条件建立在文本框的基础上。在创建
过滤器
字符串时,代码可以检查该文本框是否为空。如果不为Null,请根据文本框的值添加条件。如果为空,
过滤器可以忽略该文本框

Dim strFilter作为字符串
用[表格]![测试结果]
如果不为空(![Text102]),则
strFilter=strFilter&“和测试名称类似“*”&![Text102]&“*”
如果结束
如果不为空(![Combo89]),则
strFilter=strFilter&“和teacher=“&!”![现场][89]
如果结束
如果不为空(![Combo52]),则
strFilter=strFilter&“和subject=“&!”![现场][52]
如果结束
如果不是(IsNull(![Text83])或IsNull(![Text85]),则
strFilter=strFilter&“和测试日期介于”&格式(![Text83],“\\\\\ yyy-m-d\\”)之间)_
&“和”&格式(![Text85],“\\ yyyy-m-d\”)
如果结束
以
如果Len(strFilter)>0,则
'使用Mid()放弃前导的“AND”

调试。打印Mid(strFilter,6)'谢谢!它是有效的,但我不认为它会。。。当我第二次搜索时,Filter并没有给我一个错误,它只是给了我以前的结果:这就是为什么我认为它是“粘性的”。