2016-08-03 6 views
0

У меня есть таблица доступа, которая содержит около 500 000 записей. Я хочу обрезать результаты при вводе текста в ComboBox. В принципе, мне нужен динамический ComboBox, который отображает записи на основе каждого символа при вводе в ComboBox.Добавление функции Autocomplete или typehead в ComboBox в Access 2016

Проблема заключается в том, что базовая таблица для ComboBox имеет около 500 000 записей. И объект ComboBox может отображать только 65 000 записей, прежде чем он достигнет своего предела, и не будет просматривать остальные записи. Никто не смотрит на 65 000 записей одновременно, но когда набирается какое-либо число в середине всего набора записей, записи вообще не отображаются. Потому что это конкретное число превышает 65 000 лимитов. Поэтому мне нужна динамическая combobox для всей таблицы.

Например, если вы смотрите на кучу SSN, вместо ComboBox, отображающего все записи, которые он не может, поскольку слишком много SSN (более 65 000, что является пределом ComboBox), это то, что мне нужно.

Если вы наберете 5 в ComboBox. В списке будет отображаться только 5 номеров. Если вы наберете 51, это ограничит значениями списка 51-й серии. Если вы наберете 512, оно ограничивает значения в списке номеров 512 и так далее. ДЛЯ ВСЕГО ТАБЛИЦЫ МЫСЛИ, а не только первые 65K.

ЧТО ТАКОЕ ИСКУССТВУЮТ, что FAR реализует второе несвязанное текстовое поле, однако это вызывает запрос двухэтапного процесса. Мне интересно, могу ли я просто сделать все вместе.

+0

Нет Я не был ни – BenLawal

ответ

2

David W Fenton уже предоставил довольно подробный ответ на эту проблему here. Сущность:

Самый простой способ - назначить Rowsource только после ввода некоторых символов. Вы бы сделать это в OnChange событии задает здесь в

Аллен Браун Combos with Tens of Thousands of Records имеют некоторые другие прибамбасы (абстрагировать логику в функцию, предотвращая перерасчет RowSource если значение не изменилось), но Основная идея та же:

  1. Оставьте RowSource свойство комбо пустым.
  2. Создайте функцию, которая назначает RowSource после ввода минимального количества символов. Загружаются только записи, соответствующие этим начальным символам, поэтому RowSource комбо никогда не содержит более нескольких сотен записей.
  3. Вызовите эту функцию в событии Change combo и текущем событии формы.

Если вы действительно хотите, чтобы последовательно фильтровать RowSource как каждый символ набран, вы могли бы адаптировать эти ответы, чтобы сделать это. Например, вы можете изменить условие теста в решении David W Fenton на If Len(Me!cmbMyCombo.Text) >= 1. Для решения Allen Browne вы можете установить константу в 1 и изменить линию, которая устанавливает sNewStub: sNewStub = Nz(sSuburb, "").

Однако, пока ваш запрос RowSource не возвратит кусок чисел, который меньше предела строки, вы не увидите никакой выгоды. Вот почему оба вышеупомянутых решения начинают фильтровать после ввода 2 (или 3 или 4) начальных символов.