Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Поиск в БД   Найти похожие ветки 

 
SarDoX   (2005-01-23 06:12) [0]

база аксесс. есть таблица из тысячи строк. 2 стобца: Nazvanie / Recept
названия короткие, но вот рецепты - бывают и по пол страницы..
мне нужно искать слово(edit1.text) в рецепте(Recept).
сделал так

var zapros:string;
----
form1.ADOQuery1.active:=false;
form1.ADOQuery1.close;
form1.ADOQuery1.SQL.Clear;
zapros:="SELECT nazvanie FROM MYNEWTABLE Where recept like  "%" + edit1.text + "%"";//в эдите храниться искомое слово
form1.ADOQuery1.SQL.text:=zapros  ;
form1.ADOQuery1.open;
но уж очень долго это. можно как нить побыстрее?


 
aus   (2005-01-23 08:24) [1]

Попробуй использовать фильтр для клиентского НД.

ADOQuery1.Filtered := true; //1 раз
................
ADOQuery1.Filter := "recept like ...


Но лучше всего в даном случае (мое личное мнение) использовать OnFilterRecord для DBGrid, т.к фильтр не всегда можно составить так, как тебе требуется (по текстовому полю), есть ограничения на маску, почитай в MSDN.


 
sniknik ©   (2005-01-23 10:48) [2]

быстрее будет если использовать поиск по индексу (тот который индекс будет использовать) и соответственно этот иддекс по этому полю должен быть.

в данном случае индекс не используется, вот если убрать первый знак % то будет... но смысл запроса несколько поменяется.
ищеш вхождение в большом тексте, это не только полный скан таблици но и скан каждого "нехилого" текста, по твоим же словам, в каждой записи.

если не менять смысла, заменить форму всетаки придется, есть такой способ с дополнительной индексированной таблицей куда вносятся слова из текста и ссылка на запись в которой оно находится. это в общем, если подробности, найди описание как реаализован полнотекстовый поиск в MSSQL тебе придется тоже самому реализовывать.


 
Atomic   (2005-01-24 08:28) [3]

ADOQuery1.Filtered := False;
ADOQuery1.Filter := "[Recept]="""+edit1.text+"""";
ADOQuery1.Filtered := True;


 
Erik1 ©   (2005-01-24 11:21) [4]

И недадо забывать, что значение надо не подстовлять в запрос, а задавать через параметр. Хотя в данном случае скорости это немного добавит. Больно уж запрос тяжелый.


 
Johnmen ©   (2005-01-24 11:24) [5]

>form1.ADOQuery1.active:=false;
>form1.ADOQuery1.close;

Масло масляное ?

>form1.ADOQuery1.SQL.Clear;
>form1.ADOQuery1.SQL.text:=zapros  ;

Масло масляное ?


 
Sergey13 ©   (2005-01-24 11:32) [6]

>но уж очень долго это.
А скока "долго"? Для кого "долго"?
>можно как нить побыстрее?
Наверное можно, но полей в БД должно быть больше, как и самих таблиц. Иными словами, перепроектировать все это надо, ИМХО (хотя для поваренной книги может и сойдет). Искать то наверное надо по конкретным критериям, типа по ингридиентам, по продолжительности готовки и т.д. Вот и надо эти критерии как то выделять, а не просто в текст совать. Тут кстати еще нарваться можно на разные формы слов.


 
SarDoX   (2005-01-25 07:42) [7]

Sergey13
Да, кулинарная книга. Перепроектировать надо бы, но у меня и так 1000 записей, т.е я 1000 раз нажимал копировать - всавить и уже так замучался, что повторять не хочу..


 
Sergey13 ©   (2005-01-25 09:53) [8]

2[7] SarDoX   (25.01.05 07:42)
Если устал - отдохни. 8-)



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.05 c
1-1107707859
VasRog
2005-02-06 19:37
2005.02.20
Dec to Bin


3-1106543428
SarDoX
2005-01-24 08:10
2005.02.20
Сложный поиск


3-1106058019
Бульбаш
2005-01-18 17:20
2005.02.20
Как отменить Post при переходе на другую строку?


3-1106153549
_alien_
2005-01-19 19:52
2005.02.20
Как в DBGrid добавить SpinEdit?


4-1104770694
STK
2005-01-03 19:44
2005.02.20
Открыть и закрыть чужую программу.