在 ms-Access 中使用组合框创建搜索表单
Posted
技术标签:
【中文标题】在 ms-Access 中使用组合框创建搜索表单【英文标题】:Creating a Search Form using a Combo Box in ms-Access 【发布时间】:2021-04-05 22:58:30 【问题描述】:目标:我想创建一个自定义表单来过滤表格中的数据。我有一个组合框,用于选择过滤条件,然后生成一个包含所需过滤数据的子表单。
这是我仅在特定字段与我选择的组合框值匹配时才使用过滤条件填充子表单的代码。
Private Sub comboBox_selection_AfterUpdate()
Dim Filter_Function As String
Filter_Function = "SELECT * FROM mainTable WHERE ([Specific_Field] = " & Me.comboBox_selection & ")"
Me.Some_subform.Form.RecordSource = Filter_Function
Me.Some_subform.Form.Requery
End Sub
结果:当我从组合框中选择条件时,我会收到消息
"查询表达式中的语法错误(缺少运算符) '([Specific_field] = comboBox_selection)'"
当我尝试调试代码时,它会突出显示该行
Me.Some_subform.Form.RecordSource = Filter_Function
有一个黄色箭头指向它。
附加信息:
-
用于生成组合框值的表来自不同的表“Another_Table”,而不是主表
我用作检查匹配组合框选择的字段的 mainTable 字段也是从同一“Another_Table”中提取选项的组合框
我对 VBA 和一般编码非常陌生,所以我可以说这个错误可能是我还没有学过的基本知识。我对所有的拼写和标点符号进行了三次检查,所以我非常确信这不是问题(除非有一些奇怪的规则说我不能将我的表格/表单名称大写)。
过去几天我试图自己找到答案,但失败了。
如果有人能指出我正确的方向,将不胜感激。
【问题讨论】:
编辑问题以显示组合框 RowSource SQL。 [Specific_Field] 是什么数据类型?而不是设置 RecordSource,可能只设置 Filter 和 FilterOn 属性。 我不确定“RowSource SQL”是什么。我的组合框在“数据”中显示“行源”是 = SELECT [cbox_table].[cbox_field] FROM cbox_table ORDER BY [cbox_field];希望这有帮助 [Specific_Field] 的数据类型是短文本,但它也是一个组合框。它从 [cbox_table]![cbox_field] 中提取数据 这是一个直接在 RowSource 属性中的 SQL 语句 - 而不是表或查询对象名称。您有名为cbox_table
的表?奇怪的名字,没有信息。此表中有哪些数据?
我的道歉;你是对的,我有一个 cbox_table
表,它只有一个简短的文本字段。此表的唯一目的是提供一种易于编辑的方法来生成组合框。所以我使用这个表来提取数据以生成我的组合框下拉选项。我回答你上面的第一个问题了吗? "Show combobox RowSource SQL"
是的,但是这些数据是什么 - 人、汽车、水果?该表称为“查找”表。单个字段表不太常见但并不奇怪,只是表通常具有更多信息名称。是的,这确实回答了问题。你明白我的解释吗?
【参考方案1】:
正如@June7 建议的那样,您可以尝试FilterOn
属性。我还建议您使用after_update
事件。
Dim Filter_Function As String
Filter_Function = "[Specific_Field] ='" & Me.cboSearch & "'"
Forms![MyFormName]![Some_subform].Form.FilterOn = False
Forms![MyFormName]![Some_subform].Form.Filter = Filter_Function
Forms![MyFormName]![Some_subform].Form.FilterOn = True
【讨论】:
我今天试试这个,谢谢你的建议。我的语法似乎也有点不对劲。我会在今天晚些时候更新。谢谢! 如图所示,文本字段的参数周围需要撇号分隔符。使用 # 作为日期/时间类型,不使用数字类型。【参考方案2】:我确实使用了After_Update
事件以及@Harun24HR 提供的上述代码。
感谢@June7 和@Harun24HR,这既提供了令人难以置信的信息,也很有帮助。 Filter and FilterOn
功能完美运行。我相信我现在明白了这个函数是如何工作的,以及为什么它有三行代码(就订单操作而言?)。这比我第一次尝试要简洁得多。
我想我需要访问更多的基本 VBA 教程才能访问。
【讨论】:
在我的代码中,如果该子表单已经有任何过滤器,FilterOn=False
将清除过滤器。然后第二个 libe 将设置过滤器,第三行将执行过滤。因此,如果发现答案有帮助,请考虑接受我的答案(打勾),以便其他人知道这可以解决您的问题,并且该问题将被视为已解决给这个社区。span>
抱歉!我不知道那是怎么做的。谢谢你。我应该更仔细地关注屏幕上的所有内容。以上是关于在 ms-Access 中使用组合框创建搜索表单的主要内容,如果未能解决你的问题,请参考以下文章