Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизПоиск в БД Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c