powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь по интерактивному поиску в БД...
18 сообщений из 18, страница 1 из 1
Нужна помощь по интерактивному поиску в БД...
    #37709000
puma_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Посоветуйте как можно сделать следующее. Есть БД MS SQL, в ней около 10000 записей. Необходимо в Excel организовать интерактивный поиск (не помню как правильно такой поиск называется) по одному определённом столбцу всех записей. Все найденные записи необходимо выводить в ListBox или в что то подобное... Т.е. при вводе в поле каких-нибудь символов сразу заносились найденные записи удовлетворяющие критерию поиска в ListBox или в что то подобное. Если делать запрос к базе каждый раз при вводе нового символа, то будут тормоза связанные с выполнением запроса, очистки ListBox и занесения найденных записей в ListBox... Посоветуйте как это можно всё аппетитно мделать...
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37709061
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
puma_q,

Из боевого опыта :)
При инициализации формы, заношу весть массив в listbox с visible=false
затем пишу функцию которая шерстит данный массив и перекладывает данные в listbox, затем при добавлении символа считываю массив с видимого контрола, при убавлении шерстим весь массив со скрытого контрола.
на 100000 записей не знаю как будет шерстить но при 5 - 6 отрабатывало быстро.
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37709815
puma_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
жду ёще предложений как это можно сделать....
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37709817
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
puma_q,
Интересно, а что Вы хотите вообще увидеть ?? готовый код ?
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37709823
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
puma_qжду ёще предложений как это можно сделать....Набор записей ака ADO.Recordset с курсором на клиенте. Кода меньше, чем с массивом, но принцип тот же.
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711417
puma_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возникло несколько вопросо:
1. не понятно как в массиве искать записи удовлетворяющие заданному критери, т.е. это перебор всего массива с проверкой на вхождение?
2. если применять ADO.Recordset и функцию filter, что быстее будет работать фильтр в ADO.Recordset или поиск в массиве....?
3. Есть ли какой-нить элемент типа DBTable в Excel, что бы можно было на форму выложить и указать для datasource?
4. Если есть ещё у какого-то идея как это сделать, прошу высказаться....
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711445
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
puma_q2. если применять ADO.Recordset и функцию filter, что быстее будет работать фильтр в ADO.Recordset или поиск в массиве....?
3. Есть ли какой-нить элемент типа DBTable в Excel, что бы можно было на форму выложить и указать для datasource? 2. А зачем тянуть всю таблицу на клиента, а затем фильтровать? Поскольку условие у вас известно ДО обращения к серверу - используйте сразу в SQL-query конструкцию 'select ... from ... where ...'
3. MSHFlexGrid , наверное...
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711455
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. А, нет. Я неправ был... У вас же посимвольный поиск. Придётся таблицу полностью залить на клиента. НО! - можно ведь затем и через ADO обращаться уже к локальной копии...
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711459
lu0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lu0
Гость
просто поиск делается не на каждое нажатие/изменение строки поиска, а с задержкой, скажем 300-600 ms
а в остальном - обычные select-ы
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711487
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
puma_qВозникло несколько вопросо:

<<<1. не понятно как в массиве искать записи удовлетворяющие заданному критери, т.е. это перебор всего массива с проверкой на вхождение?>>>>
Да
<<<2. если применять ADO.Recordset и функцию filter, что быстее будет работать фильтр в ADO.Recordset или поиск в массиве....?>>>
Проверьте сами, что мешает ? На мой взгляд на массиве будет быстрее

<<<3. Есть ли какой-нить элемент типа DBTable в Excel, что бы можно было на форму выложить и указать для datasource? >>>
Наверное только сторонние Activex

<<<4. Если есть ещё у какого-то идея как это сделать, прошу высказаться....>>>
..................................
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711511
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорость массива для ваших 10000
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub test()
Dim t$, a&, tt As Single
tt = Timer
t = "htgjwrgnejrthuihvmnfgjksdrthuetgurhgjszrgjksrnbertbenrtbehryrufgshruthrutbnbntrbthrbtryguhyeirghertuebneb"
For i = 1 To 10000
If InStr(1, t, "bneb", vbTextCompare) > 0 Then a = a + 1
Next
Debug.Print Timer - tt; a
End Sub


результат
Код: vbnet
1.
 0,015625  10000 

...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711572
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему не воспользоваться сводной таблицей.
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711583
R Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FПочему не воспользоваться сводной таблицей.
Она уже интерактивный поиск могет
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711595
puma_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Что то не могу найти в References MSHFlexGrid (вроде так вот правильно она называется msflexgrid), как она правильно называется MSHFlexGrid или откуда её можно скачать?
2. AndreTMА, нет. Я неправ был... У вас же посимвольный поиск. Придётся таблицу полностью залить на клиента. НО! - можно ведь затем и через ADO обращаться уже к локальной копии...

Блин, я не знаю как сделать запрос к запросу... :(
у меня есть запрос:
Код: vbnet
1.
2.
3.
4.
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.Open "Driver={SQL Server};" & "Server=100.10.21.77;" & "Database=MTR;" & "Trusted_Connection=yes"
    rst.Open "SELECT * FROM MTR ORDER BY [Name];", cnn, adOpenStatic


Как к нему обратится?
3. lu0 просто поиск делается не на каждое нажатие/изменение строки поиска, а с задержкой, скажем 300-600 ms

А как это организовать?, в самой процедуре Private Sub TextBox1_Change()?
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37711602
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
R DmitryFПочему не воспользоваться сводной таблицей.
Она уже интерактивный поиск могет
Она намного лучше может.
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37715846
puma_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу коментариев по этим высказываниям:
1. AndreTMПридётся таблицу полностью залить на клиента. НО! - можно ведь затем и через ADO обращаться уже к локальной копии...

как через ADO обращаться уже к локальной копии набора данных?

2. lu0просто поиск делается не на каждое нажатие/изменение строки поиска, а с задержкой, скажем 300-600 ms

Как это организовать, в самой процедуре Private Sub TextBox1_Change()? Типа sleep 500, но ведь при этом происходит "подвисание" программы и набранный текст не отображается в поле пока не отработается макрос...
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37715906
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Сначала вы считываете таблицу и копируете рекордсет в один из листов своей книги. Дальше - обращаетесь уже к этому листу, получая новый набор, примеры есть там 12276857 . Или можно, конечно, попробовать и первоначально полученный рекордсет фильтровать...
2. Используйте Timer().
...
Рейтинг: 0 / 0
Нужна помощь по интерактивному поиску в БД...
    #37716162
puma_q
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все спасибо, вроде всё получилось....

P.S.
Если кому интересно.... По сравнению с выборкой в массиве, фильтрация в рекордсете гораздо дольше происходит - в разы...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Нужна помощь по интерактивному поиску в БД...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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