Вопрос № 87959: Здравствуйте уважаемые эксперты!!!
Вы не могли бы подсказать как осуществить поиск по базе данных в Delphi, после ввода каждой буквы, что бы сортировка шла, а не сразу по целому слову, через компонент TQuery, ну или если можно через другой компон...
Вопрос № 87.959
Здравствуйте уважаемые эксперты!!!
Вы не могли бы подсказать как осуществить поиск по базе данных в Delphi, после ввода каждой буквы, что бы сортировка шла, а не сразу по целому слову, через компонент TQuery, ну или если можно через другой компонент, то через другой.....
Заранее спасибо...
Отправлен: 21.05.2007, 21:07
Вопрос задал: Линецкий (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Виктор Пырлик
Здравствуйте, Линецкий!
Это можно реализовать в событии визуального компонента (любого) OnKeyDown
В методе реализовать вызов процедуры любого компанента доступа к данным TTable, TQuery, TADOTable TIBTable и даже процедур – у них у всех есть метод Locate.
Query1.DisableControls;
Query.Active := false;
Query1.SQ.Clear;
Query1.SQL.Add(Format(‘SELECT * FROM MYTABLE WHERE POLE1 LIKE ‘%s%’,[Edit1.Text]));
Query.Active := true;
Query1. EnableControls;
Надо понимать, что это сильно нагружает транспортный поток м/у клиентом и базой, да и сам сервер тоже.
--------- Надо пребывать господа, пребывать! Иначе ничего не получится!
Ответ отправил: Виктор Пырлик (статус: 3-ий класс)
Ответ отправлен: 21.05.2007, 22:26
Отвечает: Химяк Виктор Васильевич
Здравствуйте, Линецкий!
Можно также использовать событие OnChange, ниже кусок работающего кода.
Лучше, на мой взгляд использовать 1 вариант, т.е. функцию Locate, но все зависит от задачи.
procedure TfmMain.Edit3Change(Sender: TObject);
begin
if edit3.Text<>'' then
begin
Table1.IndexName:='';
if length (edit3.Text)=5 then
begin
if not tTable1.Locate('nomerab', edit3.Text,
[loCaseInsensitive, loPartialKey])
then showmessage('search not found');
end;
end;
end;
Ответ отправил: Химяк Виктор Васильевич (статус: 5-ый класс)
Ответ отправлен: 22.05.2007, 01:05