|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.02.2010, 15:41 | #1 |
Пользователь
Регистрация: 13.02.2010
Сообщений: 17
|
Немного о поиске в ADO
Здравствуйте. Возник такой вопрос. Есть DBGrid, в нем таблица данных. Хочу использовать Locate для поиска данных. Основа на таком примере:
Код:
|
13.02.2010, 15:52 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
погодите, в массиве находится НЕСКОЛЬКО чисел..
а Locate - найдёт ОДНО значение. Вам какое из массива надо найти? Если первое - то так: Код:
|
13.02.2010, 16:03 | #3 |
Пользователь
Регистрация: 13.02.2010
Сообщений: 17
|
Интересное мнение, но мне нужно не одно, а чтоб значения массива в Listbox были задействованы.
Последний раз редактировалось mihali4; 14.02.2010 в 13:27. |
13.02.2010, 22:59 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Интересная мысль. А, если не секрет, что вы подразумеваете под словами "были задействованы"?
Отфильтровать те строчки в гриде, ID которых заданы в ListItems ? тогда у Вас есть несколько вариантов (правда, варианта с использованием locate я Вам не могу предложить ): плохой вариант: - вешаетесь на событие OnFilterRecord и в этом событии проверяете, ID переданной записи есть в ListBox - тогда возвращаете Accept := true иначе - Accept := false; хороший вариант: загоняете все необходимые значения в БД (во временную таблицу) и выбираете нужные записи через SQL... средний вариант: добавляете в датасет поле и в цикле проставляете в это поле признак, отбирать данную запись или нет (1/0 или True/False или 'Y'/'N' ) потом в момент, когда нужно отфильтовать: dataset1.Filter := ' НужноеПоле = 1 '; dataset1.Filtered := true; ещё есть вопросы? Последний раз редактировалось mihali4; 14.02.2010 в 13:29. |
14.02.2010, 11:58 | #5 |
Пользователь
Регистрация: 13.02.2010
Сообщений: 17
|
Я в обработке события нажатия мыши написал
ADOQuery2.SQL.Add('Select * from Table'); ADOQuery2.SQL.Add('where N like ''%'+Listbox1.Items[i]+'%'''); Но выводит только последнее совпадение из Listboxa, не подскажешь чтобы и несколько записей мог вывести? Прекращайте ненужное цитирование предыдущих сообщений! Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе... А кроме кнопки "Цитата" есть просто окно для ввода своего сообщения. Модератор Последний раз редактировалось mihali4; 14.02.2010 в 13:28. |
14.02.2010, 15:52 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
лишь бы длины запроса хватило! Да и не очень эффективен он будет, с точки зрения производительности (т.к. OR чрезвычайно плохо оптимизируются СУБД при выполнении). Да и Like не самый лучший вариант в плане производительности.. Кстати, а почему LIKE, вроде бы речь в вашем первом сообщении шла об ID? тогда я бы предложил конструкцию: "... where ID in (значение1, значения2, ... значениеK)" впрочем, хозяин — барин. извольте: Код:
|
|
14.02.2010, 16:12 | #7 |
Пользователь
Регистрация: 13.02.2010
Сообщений: 17
|
Спасибо. Я нашел способ сделал немного по-другому... Твой способ тоже норм
Последний раз редактировалось mihali4; 14.02.2010 в 18:54. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибки в поиске и сортировке | Lexeres | Помощь студентам | 3 | 20.12.2009 11:46 |
Требуется помощь в поиске заказов. | Orbita | Фриланс | 1 | 08.08.2009 20:06 |
Теоретический Вопрос о поиске | diliana | Помощь студентам | 16 | 13.06.2009 03:19 |
Нужна помощь в поиске ошибки | m9ss | Общие вопросы Delphi | 6 | 05.03.2009 13:14 |