Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Поле со списком... Опять!  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
Коллеги !
Суть вопроса...
Есть поле со списком на базе SQL-запроса. При вводе в это поле выпадает список.
Хотелось бы, чтобы при вводе на список накладывался как бы фильтр по введенному выражению, то-есть из всего списка отбирались те позиции, которые соответсвуют введенному (хоть и частично) в поле выражению.
Как это сделать - понятно, НО будет очень медленно работать (если после ввода каждого символа в свойстве KeyPreview, делать
.RowSource.requery
Можно ли вообще , чтобы подобная функция работала быстро (хотя бы относительно быстро)

Давид

P.S.
Кажется изложил не очень внятно, извиняюсь.
29 окт 04, 12:30    [1070947]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
P.P.S.
Access 97, 2000, базы mdb.
29 окт 04, 12:32    [1070956]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
scoritt
Member

Откуда: Москва
Сообщений: 166
А зачем что-то придумывать? В поле со списком работает автозаполнение! Ввёл первую буковку и появилось первое подходящее :))
29 окт 04, 12:37    [1070969]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
scoritt
А зачем что-то придумывать? В поле со списком работает автозаполнение! Ввёл первую буковку и появилось первое подходящее :))

УТОЧНЯЮ...
Допустим весь список 500 строк
Вы ввели первую буква "Ф" и у Вас сисок - 100 строк,где все строки начинаются с "Ф". Ввели "Фп" - сисок 20 строк, все начинаются с "Фп" и т.д.
Тоесть фильтр на список.
Ну а автозаполнение ... это тоже хорошо.
29 окт 04, 12:48    [1071028]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
Ирча
Member

Откуда: глубокая тундра ;)
Сообщений: 1874
Private Sub Подрядчик_KeyPress(Cancel As Integer)
 Dim tblT As Variant, dbT As Variant
   Dim fldKod As Variant, fldName As Variant
   Dim strPoisk As String
   Dim strRS As String
   Dim ctlSpisok As Variant
   Set dbT = CurrentDb()
   Set tblT = dbT.TableDefs("Подрядчики")
   Set fldKod = tblT.Fields("КодП")
   Set fldName = tblT.Fields("Наименование подрядчика")
   Set ctlSpisok = Me![подрядчик]
   If Not IsNull(strPoisk) Then
       strRS = "SELECT   " & tblT.Name & "." & fldKod.Name & ",  " & tblT.Name & ".[" & fldName.Name & "] " _
       & "FROM " & tblT.Name & " " _
       & "WHERE ((( " & tblT.Name & ".[" & fldName.Name & "]) Like '*" & Me![подрядчик].Text & "*'));"

ctlSpisok.RowSource = strRS
SendKeys "%{DOWN}", True
 End If

End Sub
Пример работы
Отбор производится с любой частью поля
29 окт 04, 13:08    [1071126]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
Уважаемый(ая) Ирча!
1. Тот же .recordsorce.requery - только в профиль.
2. В том поле уже есть recordsorce - с "SELECT ..." на 4 строчки из 4-х таблиц с кучей условий по WHERE и HAING ( , а так же большим order...)
При первом входе в поле список отбирается и выпадае за 1,5-2 сек !

Вот такой ПЕРДЕМОНОКЛЬ ...
29 окт 04, 13:21    [1071178]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
Shark
Member

Откуда:
Сообщений: 2365
Во временную табличку результаты сложите...
Первые сорок записей выводите, а не 500..
Если Ваш запрос долго считается, то я не могу сказать крекс-пекс-фэкс и ускорить его расчет:-)
29 окт 04, 13:29    [1071203]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
Ирча
Member

Откуда: глубокая тундра ;)
Сообщений: 1874
Ну, звиняйте, бананьев нема Картинка с другого сайта.
Просто у меня тоже очень большой список, а отбирается в лет...
29 окт 04, 13:30    [1071205]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
ДАВИД
Member

Откуда: г. Одесса
Сообщений: 348
НАРОД! не ругайте меня !!!
Дело только в том, чтобы ограничивать выбор из списка для стерто операторов! О!!!
(...извините.)
29 окт 04, 13:43    [1071276]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
Shuhard
Member

Откуда:
Сообщений: 4998
ДАВИД
Уважаемый(ая) Ирча!
1. Тот же .recordsorce.requery - только в профиль.
2. В том поле уже есть recordsorce - с "SELECT ..." на 4 строчки из 4-х таблиц с кучей условий по WHERE и HAING ( , а так же большим order...)
При первом входе в поле список отбирается и выпадае за 1,5-2 сек !

Вот такой ПЕРДЕМОНОКЛЬ ...

Шарк прав - нужна промежуточная таблица - справочник
29 окт 04, 13:55    [1071325]     Ответить | Цитировать Сообщить модератору
 Re: Поле со списком... Опять!  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 18324
Фильтрация формы

работает в улетно

почти как у Ирчи, но сложнее критерий.


при первом входе список.RowSource="" , и не надо тратить время на ожидание - всё равно полный список не нужен.

а ежели like поставить где-нить в первоначальных отборах дак вообще должно быстро быть.

у меня список редко получается больше 10 строк (при 2-3 условиях)
29 окт 04, 16:46    [1072039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить