Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2007, 00:14   #1
CHITER
Пользователь
 
Аватар для CHITER
 
Регистрация: 02.07.2007
Сообщений: 11
По умолчанию Помогите ребята с индексом

Короче у меня на едит1 по событию ончанге стоит процедура:
Код:
procedure TMyForm.LabeledEdit1Change(Sender: TObject);
begin
if Length(LabeledEdit1.Text)>0 then
DataModule2.ADOTable1.Filtered:=true
else
DataModule2.ADOTable1.Filtered:=false;
DataModule2.ADOTable1.Filter:='Fio>'''+LabeledEdit1.Text+'''';
end;
вот и када начинаешь вводить че нить то вводится как то медленно курсор медленно двигается (объем БД используемый мной весит 45Мб) Помогите если меня поняли...пожалуйста
CHITER вне форума Ответить с цитированием
Старый 28.07.2007, 01:40   #2
Mitriy
Пользователь
 
Регистрация: 08.07.2007
Сообщений: 47
По умолчанию

Я так понимаю, ты сдесь производиш поиск по полю Fio. Попробуй делать поиск не фильтром, а через locate.
Mitriy вне форума Ответить с цитированием
Старый 28.07.2007, 09:56   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Фильтр вообще работает очень медленно, а при больших объемах данных его лучше вообще не использовать. Оптимальный вариант sql-запросом так
Query.SQL.Add('Select * from TABLE where Upper(FIO) LIKE Upper("%' + FindEdit.Text +'%");');
(по подстроке без учета регистра)
_SERGEYX_ вне форума Ответить с цитированием
Старый 28.07.2007, 21:58   #4
CHITER
Пользователь
 
Аватар для CHITER
 
Регистрация: 02.07.2007
Сообщений: 11
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Фильтр вообще работает очень медленно, а при больших объемах данных его лучше вообще не использовать. Оптимальный вариант sql-запросом так
Query.SQL.Add('Select * from TABLE where Upper(FIO) LIKE Upper("%' + FindEdit.Text +'%");');
(по подстроке без учета регистра)
да я произвожу поиск по Fio а вот чет с сикулом не въезжаю можете ребят поподробнее...?
CHITER вне форума Ответить с цитированием
Старый 28.07.2007, 23:42   #5
Mitriy
Пользователь
 
Регистрация: 08.07.2007
Сообщений: 47
По умолчанию

Cмотря по коду у тя главная таблица соединяется с помощью ADOTable, если да, то добавляеш еще одну форму, кидаеш ADOQuery, DataSet
DBGrid соеденяеш их между собой, кидаеш на главную флрму кнопку, тыкаеш на нее 2 раза, пишеш:
Код:
 ADOQuery.Active:=false;
 ADOQuery.SQL.Clear;
 ADOQuery.SQL.Add('SELECT *');
 ADOQuery.SQL.Add('FROM Название_твоей_таблицы'); 
 ADOQuery.SQL.Add('WHERE Название_поля LIKE '''+Edit1.Text+'%''');
 ADOQuery.Active:= true;
Пример: вводиш в Edit1 ааа
результат: все записи которые начинаются на ааа
Если хочеш чтобы вывело точно совпадения текста то после +Edit1.text+ % не ставится
Если хочеш, чтобы поиск букв ишол во всех словах то перед +Edit1.Text+ ставиш % (т.е ''%'+Edit1.Text+'%'')
Mitriy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ребята помогите Doctor_iZmail PHP 2 17.02.2008 23:01
Ребята я новичок помогите..... Alex-jr Microsoft Office Excel 5 17.12.2007 07:02