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

Обработчики в форме для 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
20.09.2006, 12:35
    #33999380
accessprogrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
На строке Set rec = con.Recordset.Clone говорит Type mismatch.
Наверное что-то не подключено... Хотя ADODB.Recordset понимает.

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

Подскажите пожалуйста что не так делаю...
не та версия акцесс
...
Рейтинг: 0 / 0
20.09.2006, 12:57
    #33999483
Ёжик`
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
У меня MSA2003
...
Рейтинг: 0 / 0
20.09.2006, 12:58
    #33999488
accessprogrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Версия Microsoft Office Access 2003 (11.6355.6330) SP1 - это то что в About пишет. Может подскажите как переделать...
...
Рейтинг: 0 / 0
20.09.2006, 13:19
    #33999608
Ёжик`
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
базу в студию
...
Рейтинг: 0 / 0
20.09.2006, 13:22
    #33999619
accessprogrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Ага. Даю.
...
Рейтинг: 0 / 0
20.09.2006, 13:49
    #33999736
Ёжик`
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
У меня ADP.
Но почему в MDB не работает? буду разбираться...
...
Рейтинг: 0 / 0
20.09.2006, 16:14
    #34000432
Колбаса
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Ежик, спасибо. Полезная фича.
...
Рейтинг: 0 / 0
20.09.2006, 16:42
    #34000572
ByPass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Интересная штучка.
А параметр FieldName по сути не нужен. Зная ColumnWidth комбобокса, можно вычислить номер первого отображаемого столбца и обратиться к Rec.Fields(i).Name
...
Рейтинг: 0 / 0
20.09.2006, 16:45
    #34000587
ByPass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
А в МДБ надо как минимум апостроф заменить на кавычки
...
Рейтинг: 0 / 0
20.09.2006, 16:47
    #34000598
ByPass
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Ну и в МДБ AdodbRecordset заменить на DAO рекордсет, но это можно тоже сделать динамически: -выяснить тип рекордсета, и по результатам поработать с кавычками(апострофами).
...
Рейтинг: 0 / 0
21.09.2006, 16:54
    #34003966
accessprogrammer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Пытаюсь так:
Код: 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
05.08.2007, 06:33
    #34705918
Ёжик`
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Продолжение, 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
Период между сообщениями больше года.
19.12.2010, 21:25
    #37023661
Фрилансер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
это метод для комбы в один столбец (текстовый), я так понимаю?

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

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

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

Предоставлено мало инфы.
Предположу что комбобокс основан на хранимке, а не на таблице или запросе.
...
Рейтинг: 0 / 0
19.12.2010, 22:42
    #37023740
Ёжик`
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Протестил свой древний код на комбобоксе, который основан на хранимке возвращающей кучу селектов, и комбо получил рекордсет методом NextRecordset - работает.
Может дело в курсоре?
У меня rec.CursorLocation = ADODB.CursorLocationEnum.adUseClient
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.01.2015, 17:00
    #38855444
Ant...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Ёжик`Продолжение, 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
15.01.2015, 22:37
    #38855625
ты-гы-дым
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Ant...Что нужно исправить чтобы значения оставались?


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

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


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

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

У Вас есть вариант с рабочим кодом? Просто мне нужна именно такая фича, чтобы по мере ввода в списке комбобокса оставались записи содержащие введенный текст. Прогуглил уже все что мог, но ничего более подходящего не нашел.
...
Рейтинг: 0 / 0
16.01.2015, 10:24
    #38855852
Ant...
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
Разобрался
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
18.05.2016, 01:35
    #39237817
Ёжик`
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
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
18.05.2016, 01:55
    #39237818
Ёжик`
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация ComboBox по мере внесения данных ADO
А так еще проще и лучше )

Код: 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
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Фильтрация ComboBox по мере внесения данных ADO / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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