2017-01-25 2 views
0

Мне удалось создать сборку, которая позволит пользователю выбрать запись из списка, чтобы получить идентификатор из таблицы. В таблице, в которой я работаю в настоящее время около 60 000 записей, нереально использовать этот метод для поиска записи.Используйте текстовое поле в качестве подстановочного поиска в поле в связанной таблице SQL Server в MS Access

Что я хочу, чтобы пользователь мог сделать это, введите имя в текстовое поле, а поле со списком будет заполнено соответствующими записями из таблицы, в которой одно из полей соответствует этому. Поэтому, если пользователь ввел «Это» в текстовое поле, в поле со списком будут представлены записи, в которых в поле были «Это», «Это и это» и «Это». Он не представит запись, в которой было только «Это» в поле.

Допустим, поле Текст называется «txtBox», комбо-бокс называется «COMBOX» и поле в таблице связаны SQL Server «LinkedTable» называется «SearchField»

+0

Сначала вы должны решить, что вызывает обновление поля со списком. События в текстовом поле сложны, потому что вам нужно решить, выполняете ли вы обновление при каждом нажатии клавиши или ожидаете, когда пользователь завершит ввод и выйдет из игры. Затем прочитайте текст и создайте источник строки для поля со списком (это просто запрос SQL Access). Подайте его в поле со списком и запросите его. – SunKnight0

ответ

0

В другом ответе я пошел по другому пути к предложенному варианту. Это соответствовало моим потребностям более точно и могло помочь кому-то с аналогичной проблемой.

Во-первых, я внедрил запрос в поле Combo, чтобы он использовал значение в текстовом поле в качестве критерия для одного из полей.

В Критериями для «SearchField» в «LinkedTable» Я вошел:

Like "*" & [forms]![*FormName*]![txtBox] & "*" 

Это ограничит результаты в COMBOX тех, где SearchField содержит значение, введенное в txtBox. Однако это не обновляется динамически и будет обновляться только после первого значения, введенного в txtBox.

Чтобы обойти эту проблему, я добавил следующее в «On Получить фокус» событие для COMBOX

Private Sub comBox_GotFocus() 

    Dim ctlCombo As Control 

    ' Return Control object pointing to a combo box. 
    Set ctlCombo = Forms!FormName!comBox 

    ' Requery source of data for list box. 
    ctlCombo.Requery 

End Sub 

Это заставит окно со списком, чтобы выполнить запрос снова, используя текущее значение в txtBox, каждый раз, когда он «нажимается»

В результате я получаю ограниченный список значений в поле со списком, которое мне нужно, и позволяет пользователю «искать» запись, которая затем может быть использована для создания нового запись на форме.

0

Я хотел бы предложить вам не используйте поле со списком. Просто введите текстовое поле, в котором пользователь может ввести несколько символов и нажать клавишу ввода.

Вы ТОГДА отобразите «список» результатов, который позволяет пользователю выбирать и нажимать на любой из результатов для «редактирования» или «просмотра» данной строки данных.

В следующем скриншоте мы работаем с ОЧЕНЬ маленьким столом из 500 000 строк. Мы ищем кузнеца, поэтому просто вводим smi и нажимаем enter. Результаты отображаются мгновенно, и в этот момент пользователь может ввести «имя» или несколько символов с первым именем, а затем развернуть и фильтровать.

форма выглядит следующим образом:

enter image description here Код в после обновления случае текстовое поле просто: требуется

Dim strSQL as String 

strSQL = "select * from tblCustomers where LastName like '" & me.TextSearch & "*’" 
me.RecordSource = strSQL 

Так очень мало кода. Можно предположить, что вы заполните результаты в поле со списком, но затем пользователь должен ввести в поле, затем выбрать что-нибудь из поля со списком, а затем каким-то образом вы откроете эту запись для редактирования. Это похоже на 3+ действия для пользователя.

Просто используйте то, что Google или большинство учета или штопать вблизи любого компьютерного программного обеспечения делает:

Простой текстовое поле - вы вводите несколько символов и когда они ударяют ввести результаты отображаются для пользователя, чтобы выбрать.

Обратите внимание, что над пользователем пользователь может нажать кнопку значка «очки», чтобы запустить форму, отображающую одну запись. Код за этой кнопкой:

Docmd.Openform "frmEditDetails",,,"ID = " & ME!ID