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

Вниз

Поиск в 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). По-моему это проще.



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

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

Наверх




Память: 0.49 MB
Время: 0.01 c
1-8943
Mitrofan
2002-01-18 11:34
2002.02.04
Как програмно проскролировать RichEdit ?


1-8877
Ольга
2002-01-16 14:37
2002.02.04
ListBox-ы


1-8811
Алиса
2002-01-18 16:59
2002.02.04
Excel+Delphi


3-8750
Искатель
2002-01-03 01:06
2002.02.04
Как в DBGridEh запретить обход всех записей перед отображением данных


1-8917
Eraser
2002-01-17 09:13
2002.02.04
Расположение фрейма на форме