将自动完成或类型化头功能添加到Access 2016中的ComboBox

时间:2016-08-03 12:28:08

标签: database ms-access combobox autocomplete ms-access-2016

我有一个包含大约500,000条记录的Access表。当我在ComboBox中输入文本时,我想减少结果。基本上,我需要一个动态的ComboBox,当我在ComboBox中键入时,它会根据每个字符显示记录。

问题是,ComboBox的基础表有大约500,000条记录。 并且ComboBox对象在达到其限制之前只能显示65,000条记录,并且不会预览其余记录。没有人同时查看65,000条记录,但是当输入整个记录集中间的任何数字时,记录将根本不显示。因为该特定数字超出了65,000的限制。所以我需要一个动态的组合框用于整个表格。

例如,如果您正在查看一堆SSN,而不是ComboBox显示它不能的所有记录,因为太多SSN(超过65,000,这是ComboBox限制),这就是我需要的。

如果在ComboBox中键入5。该列表仅显示5系列数字。如果键入51,则限制列表值为51系列数字。 如果键入512,则会将列表值限制为512系列数字,依此类推。对于整个表格,不仅仅是第一个65K。

我做了什么因此实现了第二个未绑定的文本框,但是,这使得查询分为两个步骤。我想知道我是否可以一起完成这一切。

1 个答案:

答案 0 :(得分:2)

David W Fenton已经为这个问题提供了一个相当详细的答案here。要点:

  

最简单的方法是只在您输入组合框中的某些字符后才分配组合框的Rowsource。您可以在组合框的OnChange事件

中执行此操作

Allen Browne的Combos with Tens of Thousands of Records还有一些其他的花里胡哨的东西(将逻辑抽象为函数,如果值没有改变则阻止重新计算RowSource),但基本思路是相同的:

  
      
  1. 将组合的RowSource属性留空。
  2.   
  3. 创建一个函数,在键入最少数量的字符后分配RowSource。只加载与这些初始字符匹配的条目,因此组合的RowSource永远不会包含超过几百条记录。
  4.   
  5. 在组合的更改事件和表单的当前事件中调用此函数。
  6.   

如果你真的想在键入每个字符时连续过滤RowSource,你可以调整这些答案来做到这一点。例如,您可以将David W Fenton解决方案中的测试条件更改为If Len(Me!cmbMyCombo.Text) >= 1。对于Allen Browne解决方案,您可以将常量设置为1并将设置sNewStub的行更改为:sNewStub = Nz(sSuburb, "")

但是,在您的RowSource查询返回一小于行限制的数字之前,您将不会看到任何好处。这就是为什么上面链接的两个解决方案在键入2(或3或4)个初始字符后开始过滤的原因。