powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Фильтрация ComboBox по мере внесения данных ADO
24 сообщений из 24, страница 1 из 1
Фильтрация ComboBox по мере внесения данных ADO
    #33637392
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делюсь с общественностью.
Поиск строки в комбобоксе + фильтрация.
Например для поиска ООО "Дядька Черномор" можно набрать черно

Обработчики в форме для ComboBox по имени YID
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub YID_Change()
ComChange Me.YID, "[Официальное_имя]"
End Sub

Private Sub YID_AfterUpdate()
ComUpdate Me.YID
End Sub

Универсальные функции
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function ComChange(con As ComboBox, FieldName As String)
Dim rec As ADODB.Recordset
If con.SelText = "" Then
    Set rec = con.Recordset.Clone
    If con.Text <> "" Then rec.Filter = FieldName & " Like '*" & con.Text & "*'"
    Set con.Recordset = rec
    
    con.Dropdown
    con.SelStart = Len(con.Text) +  1 
End If
End Function

Public Function ComUpdate(con As ComboBox)
Dim rec As ADODB.Recordset
Set rec = con.Recordset.Clone
Set con.Recordset = rec
End Function

...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #33999380
accessprogrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На строке Set rec = con.Recordset.Clone говорит Type mismatch.
Наверное что-то не подключено... Хотя ADODB.Recordset понимает.

Подскажите пожалуйста что не так делаю...
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #33999417
версия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
accessprogrammerНа строке Set rec = con.Recordset.Clone говорит Type mismatch.
Наверное что-то не подключено... Хотя ADODB.Recordset понимает.

Подскажите пожалуйста что не так делаю...
не та версия акцесс
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #33999483
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня MSA2003
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #33999488
accessprogrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия Microsoft Office Access 2003 (11.6355.6330) SP1 - это то что в About пишет. Может подскажите как переделать...
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #33999608
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
базу в студию
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #33999619
accessprogrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага. Даю.
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #33999736
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня ADP.
Но почему в MDB не работает? буду разбираться...
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #34000432
Фотография Колбаса
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежик, спасибо. Полезная фича.
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #34000572
ByPass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересная штучка.
А параметр FieldName по сути не нужен. Зная ColumnWidth комбобокса, можно вычислить номер первого отображаемого столбца и обратиться к Rec.Fields(i).Name
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #34000587
ByPass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А в МДБ надо как минимум апостроф заменить на кавычки
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #34000598
ByPass
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и в МДБ AdodbRecordset заменить на DAO рекордсет, но это можно тоже сделать динамически: -выяснить тип рекордсета, и по результатам поработать с кавычками(апострофами).
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #34003966
accessprogrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function ComChange(con As ComboBox, FieldName As String)
Dim rec As DAO.Recordset
If con.SelText = "" Then
    Set rec = con.Recordset.Clone
    If con.text <> "" Then rec.Filter = FieldName & " Like " & Chr$( 34 ) & "*" & con.text & "*" & Chr$( 34 )
    Set con.Recordset = rec
    
    con.Dropdown
    con.SelStart = Len(con.text) +  1 
End If
End Function

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

mdb прилагаю
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #34705918
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжение, MSA2003 MDB
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function ComChange(con As ComboBox, FieldName As String)
If con.SelText = "" Then
    If con.Text <> "" Then con.Recordset.Filter = FieldName & " Like '*" & con.Text & "*'"
    Set con.Recordset = con.Recordset.OpenRecordset
    con.Dropdown
    con.SelStart = Len(con.Text) +  1 
End If
End Function

Public Function ComUpdate(con As ComboBox)
Set con.Recordset = Nothing
End Function
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Фильтрация ComboBox по мере внесения данных ADO
    #37023661
Фотография Фрилансер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это метод для комбы в один столбец (текстовый), я так понимаю?

при вводе второго же символа идет ошибка "не удается открыть фильтр".
комба на двух столбцах - ИД (скрыт), и собсно текстовое поле
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #37023709
Фотография Гарри2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фрилансерэто метод для комбы в один столбец (текстовый), я так понимаю?

при вводе второго же символа идет ошибка "не удается открыть фильтр".
комба на двух столбцах - ИД (скрыт), и собсно текстовое поле
пример в студию !
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #37023714
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фрилансер,

>это метод для комбы в один столбец (текстовый), я так понимаю?
Нет

Предоставлено мало инфы.
Предположу что комбобокс основан на хранимке, а не на таблице или запросе.
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #37023740
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Протестил свой древний код на комбобоксе, который основан на хранимке возвращающей кучу селектов, и комбо получил рекордсет методом NextRecordset - работает.
Может дело в курсоре?
У меня rec.CursorLocation = ADODB.CursorLocationEnum.adUseClient
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Фильтрация ComboBox по мере внесения данных ADO
    #38855444
Ant...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёжик`Продолжение, MSA2003 MDB
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Public Function ComChange(con As ComboBox, FieldName As String)
If con.SelText = "" Then
    If con.Text <> "" Then con.Recordset.Filter = FieldName & " Like '*" & con.Text & "*'"
    Set con.Recordset = con.Recordset.OpenRecordset
    con.Dropdown
    con.SelStart = Len(con.Text) + 1
End If
End Function

Public Function ComUpdate(con As ComboBox)
Set con.Recordset = Nothing
End Function



Добрый день!

Все работает, но если я ввожу отсутствующее значение в списке, то из комбобокса пропадают все значения списка. Что нужно исправить чтобы значения оставались?
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #38855625
ты-гы-дым
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ant...Что нужно исправить чтобы значения оставались?


э-э-э-эээ
исправить?

да переписать все к чертовой такой-то матери
вы вообще пытались понять смысл этого кода или нет?
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #38855742
Ant...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ты-гы-дымAnt...Что нужно исправить чтобы значения оставались?


э-э-э-эээ
исправить?

да переписать все к чертовой такой-то матери
вы вообще пытались понять смысл этого кода или нет?

У Вас есть вариант с рабочим кодом? Просто мне нужна именно такая фича, чтобы по мере ввода в списке комбобокса оставались записи содержащие введенный текст. Прогуглил уже все что мог, но ничего более подходящего не нашел.
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #38855852
Ant...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Фильтрация ComboBox по мере внесения данных ADO
    #39237817
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSA 2010 Accdb
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
'Модуль
Option Compare Database
Option Explicit

Private ComboRec As Recordset

Public Function ComChange()
On Error GoTo er
    With Screen.ActiveControl
        If .SelText = "" Then
            If ComboRec Is Nothing Then Set ComboRec = .Recordset.Clone
            If .text <> "" Then ComboRec.Filter = ComboRec.Fields(1).Name & " Like '*" & Replace(.text, " ", "*") & "*'"
            Set .Recordset = ComboRec.OpenRecordset
            .Dropdown
            .SelStart = Len(.text) + 1
        End If
    End With
ex: Exit Function
er: Debug.Print "ComChange Error", Err.description
End Function

Public Function ComUpdate()
On Error Resume Next
    Set Screen.ActiveControl.Recordset = Nothing
    Set ComboRec = Nothing
End Function



На картинке куда-как-что прописать
...
Рейтинг: 0 / 0
Фильтрация ComboBox по мере внесения данных ADO
    #39237818
Фотография Ёжик`
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так еще проще и лучше )

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
'Модуль
Option Compare Database
Option Explicit

Private ComboRec As Recordset

Public Function ComChange()
On Error GoTo er
    With Screen.ActiveControl
        If .SelText = "" Then
            If ComboRec Is Nothing Then Set ComboRec = .Recordset.Clone
            ComboRec.Filter = ComboRec.Fields(1).Name & " Like '*" & Replace(.text, " ", "*") & "*'"
            Set .Recordset = ComboRec.OpenRecordset
            .Dropdown
            .SelStart = Len(.text) + 1
        End If
    End With
ex: Exit Function
er: Debug.Print "ComChange Error", Err.description
End Function

Public Function ComUpdate()
On Error Resume Next
    Set Screen.ActiveControl.Recordset = ComboRec
    Set ComboRec = Nothing
End Function
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Фильтрация ComboBox по мере внесения данных ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]