Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Вниз

Поиск в ADO Table 


Kirill   (2001-12-29 15:04) [0]

Как проще осуществить поиск в таблице на предмет совпадения данных. Чем больше совпадение, тем лучше.
tblMain.Locate("FIOPravoobl;City;Street;House;Flat;DatePost",
VarArrayOf([frmSearch.FIO,frmSearch.City,frmSearch.Street,frmSearch.House,
frmSearch.Fl,DateToStr(frmSearch.Dat)]), [loCaseInsensitive, loPartialKey]);

не совсем работает



Sergy   (2001-12-29 15:07) [1]

Через SQL оператором Like



Kirill   (2001-12-29 15:11) [2]

Поподробнее можно, пожалуйста.



Sergy   (2001-12-29 15:21) [3]

Query.Sql.Text:= "select * from YouTable where
youField1 like "+#39 "%youkriteri1%"+#39 +" and
.....
youFieldn like "+#39 " %youkriterin%"+#39;
Query.Open;

P.s. Синтаксис Like может отличаться при выполнении запросов к разным БД . В данном примере синтаксис для SQL server.



Sergy   (2001-12-29 15:22) [4]

Подробнее об операторе Like в FAQ по SQL



Kirill   (2001-12-29 15:26) [5]

А через таблицу это как-нибудь реализовать можно?
А то у меня хорошая привязка к этому. Query не использую.



panov   (2001-12-29 15:29) [6]

>Kirill © (29.12.01 15:26)
Только полным перебором и сравнением(мое мнение).



Kirill   (2001-12-29 15:33) [7]

>panov
Жестоко



Deamon   (2001-12-29 19:16) [8]

Попробуй через локальную фильтрацию.
Ставишь Table.Filtered := False;
Ставишь Table.Filter := "YourField1 like %"+VarCond1+
"% or YourField2 %" = VarCond2
где VarCond = искомое значение для поля YourFieldN
Ставишь Table.Filtered := True;
Радуешься результату. Работает быстро на 12000 записей,
я делал условие по 2м полям. Удачи.



Kirill   (2002-01-03 12:37) [9]

Спасибо.



Kirill   (2002-01-03 18:29) [10]

F:="";
if Trim(frmSearch.FIO)<>"" then F:=F+"FIOPravoobl like """+AnsiUpperCase(frmSearch.FIO)+""" and ";
if Trim(frmSearch.City)<>"" then F:=F+"City like """+AnsiUpperCase(frmSearch.City)+""" and ";
if Trim(frmSearch.Street)<>"" then F:=F+"Street like """+AnsiUpperCase(frmSearch.Street)+""" and ";
if Trim(frmSearch.House)<>"" then F:=F+"House like """+AnsiUpperCase(frmSearch.House)+""" and ";
if Trim(frmSearch.Fl)<>"" then F:=F+"Flat like """+AnsiUpperCase(frmSearch.Fl)+""" and ";
if trim(f)<>"" then begin
if Copy(F,length(F)-4,5)=" and " then Delete(F,length(F)-4,5);
F:="where "+F+" or DatePost = """+DateTimeToStr(frmSearch.Dat)+"""";
queryMain.Close;
queryMain.SQL.Clear;
queryMain.SQL.Add("select *");
queryMain.SQL.Add("from archive");
queryMain.SQL.Add(F);
queryMain.Open;

не работает (не находит) поиск, если в ФИО только фамилия без имени и отчества



Smile   (2002-01-03 18:35) [11]

Если база проиндексирована то можно через GoToNearest(GoToKey). По-моему это проще.




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.044 c
14-8992           fliz                  2001-12-14 18:33  2002.02.04  
---|Ветка была без названия|---


1-8846            Dmitriy_R             2002-01-21 11:05  2002.02.04  
Как выяснить целое число и его остаток после какой нить математической операции?


3-8763            Pavel_s               2002-01-03 16:46  2002.02.04  
Интеграция Interbase и NT !!!!!!!!!!


14-8996           Antuan                2001-12-10 21:49  2002.02.04  
Бил Гейтс похоронил Win 95


6-8970            Oplg                  2001-11-12 18:57  2002.02.04  
Вопрос