Access. Простой вопрос - как поставить фильтр в форме.

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
igor_m
Постоялец
Постоялец
 
Сообщения: 343
Зарегистрирован: 22.03.2002 (Пт) 12:40

Access. Простой вопрос - как поставить фильтр в форме.

Сообщение igor_m » 05.01.2008 (Сб) 19:41

Прошу помощи. Не знаю как сделать в Access.

Есть простая ленточная форма [form1] построенная на основании одной таблицы. В форме 2 поля: [id] - целое, [naim] - текст. Выводятся все строки таблицы.
В примечании формы есть поле со списком [FilterID]. Источник строк - таже таблица, поле [id] (целое).

Нужно чтобы при вводе в FilterID в форме оставались только строки соответствующие набранным цифрам (символам).
С ходу удалось сделать следующее:

Private Sub FilterID_Change()
If FilterID.Text <> "" Then
[id] = [FilterID]
End If
End Sub

Получилась ерундень: выбираешь в FilterID код и в верхней строке формы появляется соответствующая запись (с таким кодом), а вся остальная часть формы без изменения.

А нужно, чтобы все остальные записи были не видны.
Цель: вводишь "1" - в форме остаются только записи с кодом начинающиеся с этого символа: 12, 134, 188, 1223, 1578 и т.д. Вводишь еще "2" - остаются 12, 1223, 12321 и т.д.

Как поставить такой фильтр реагирующий на изменение комбобокса? Проще говоря:
1) как прикрутить запрос к этой форме? Или форму нужно строить не на основании табл, а на основании предварительно построенного запроса?
2) что за событие - ввод текста в комбобокс, которое нужно отслеживать?

Ну и желательно, чтоб в комбобоксе в списке тоже оставались только коды начинающиеся с введенных символов.

Каюсь за незнание стандартных вещей. Если есть похожий пример - киньте, разберусь.

igor_m
Постоялец
Постоялец
 
Сообщения: 343
Зарегистрирован: 22.03.2002 (Пт) 12:40

Предыдущие вопросы снимаются

Сообщение igor_m » 06.01.2008 (Вс) 14:41

Предыдущие вопросы снимаются.

Пользуясь очередным редким посещением любимого форума - уважение и благодарности таким людям как RayShade, alibek, GSerg и другим, чьи советы мне сильно помогали. Рад видеть, что форум уже много лет держится на достойном уровне и видеть знакомые ники в списке модераторов :)

igor_m
Постоялец
Постоялец
 
Сообщения: 343
Зарегистрирован: 22.03.2002 (Пт) 12:40

Снова нужна помощь.

Сообщение igor_m » 06.01.2008 (Вс) 16:25

Снова нужна помощь.

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

Private Sub Form_Load() ' понятно - начальная очистка поля
FilterID.SetFocus
FilterID.Text = ""
End Sub

Private Sub FilterId_KeyUp(KeyCode As Integer, Shift As Integer) ' ввод данных
Dim s As String, strFilter As String, i As Byte
s = "SELECT tblMain.id, tblMain.naim, tblMain.layers_in_pal, tblMain.boxes_in_lay, tblMain.blocks_in_box, tblMain.tares_in_block, tblMain.category, tblMain.tare, tblMain.weight, tblMain.lengthbox, tblMain.widthbox, tblMain.heightbox FROM tblMain"
strFilter = Trim$(FilterID.Text)
i = Len(strFilter)
If i > 0 And i < 5 Then ' тут будет проверка ввода на вшивость
s = s & " where left$(trim$(str(tblMain.id))," & Str(i) & ") = " & strFilter
End If
Me.RecordSource = s
Me.Requery
FilterID.SetFocus

End Sub

Проблема такая: после ввода символа в поле FilterID происходит обновление набора записей и ФОКУС ПЕРЕМЕЩАЕТСЯ на первое поле выборки! Чтобы набрать второй символ приходится снова мышкой тыкать в поле FilterID - морока.
FilterID.SetFocus - такой вариант не помогает, т.к. при перемещении фокуса выделяется уже набранный текст и заменяется при нажатии очередной клавиши, или нужно мышкой тыкать в конец набранной строки.

Вопрос: как сделать, чтобы не тыкать лишний раз мышкой?
1) или при вводе очередного символа в поле FilterID, курсор оставался бы в этом поле, а не переходил на первую запись выборки
2) или при принудительном перемещении фокуса FilterID.SetFocus курсор бы вставал в конец набранной строки для продолжения ввода.

Нужно просто вводить символы в FilterID, при этом с добавлением очередного символа видеть отфильтрованные записи, а при достаточной фильтрации уже ткнуть мышкой в нужную запись из набора и отредактировать ее.

igor_m
Постоялец
Постоялец
 
Сообщения: 343
Зарегистрирован: 22.03.2002 (Пт) 12:40

Как бы острота вопроса снята, но

Сообщение igor_m » 06.01.2008 (Вс) 20:13

Как бы острота вопроса снята.
Как всегда, в спешке родился очередной черезжопный вариант (что называется - уж как получилось). Если кто знает, как грамотно это делается - напишите, еще зайду сюда. Мне кажется - это должно делаться внутренними средствами без программирования.
Пока так:

Me.RecordSource = s ' обновили набор записей
FilterID.SetFocus ' принудительно кидаем фокус на текстбокс
FilterID.SelStart = i ' начиная с конца строки
FilterID.SelLength = 1 ' производим выделение 1 символа

И курсор всегда в конце набора.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 188

    TopList