![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск [D5, Paradox]
Филиппов Стас © (2002-04-13 18:14:00)Подскажите пожалуйста как можно произвести следующий поиск.
В БД имеется поле ART
ART
1234
1 23/4
12-34
1.23_4
Как можно введя 1234 в любых вариациях (с/без пробелов и т.п.)
получить все записи.
Другими словами поиск или фильтрация с игнорированием каких либо символов.
Anatoly Podgoretsky (2002-04-17 18:44:00) [1]
Result := False;
Table.First;
while not Table.Eof do begin
if анализ then begin
Result :=True;
Exit;
end
else begin
Table.Next;
end;
end;
DPetrovich (2002-04-17 18:37:00) [2]Фильтровать можно в обработчике события OnFilterRecord для DataSet"а - в строке для поиска и в значении соответсвующего поля DataSet"а убрать лишние символы и проверить на совпадение...
Filippov Stas (2002-04-17 15:55:00) [3]А не подскажите как работает это сканирование.
Anatoly Podgoretsky (2002-04-17 14:48:00) [4]Возвращайся к предложению
Anatoly Podgoretsky © (13.04.02 18:16)
тем более что другие предложенные не совсем поиск, а фильтрация
Filippov Stas (2002-04-17 11:49:00) [5]Спасибо, но я видимо не уточнил вопрос.
Записей неограниченное количество и из скольких угодно символов.
Запрос который написал Johnmen © работает, но вазвращает все записи где есть 1234 в том числе и 198 276 34.
А как можно сделать такой же поиск, но вводимые символы должны идти подряд. Если введено 123, то и в ответе ...123... идут подряд. Но все еже остается требование игнорирования всех символов кроме цифр и букв.
Спасибо.
DPetrovich (2002-04-15 12:47:00) [6]>sniknik © (15.04.02 12:35)
Спасибо за ценный совет!
sniknik (2002-04-15 12:35:00) [7]DPetrovich © слушай надоело. вместо демагогии проверь реально.
тот селект что Johnmen © писал работает именно так как в задаче было поставлено! а чего еще надо?
DPetrovich (2002-04-15 12:28:00) [8]>Johnmen © (15.04.02 12:12)
Ну если номера только 4-х значные, то да...
Johnmen (2002-04-15 12:12:00) [9]>DPetrovich © : Конечно ! Но задача ставится ...1...2...3...4...,
а не ...1... !
DPetrovich (2002-04-15 11:53:00) [10]По-моему, это всё-таки не совсем то потому как запрос
SELECT * FROM TBL WHERE FLD LIKE "%1%"
выдаст не только номера типа "1_","1." и тд, но и "123" и "12_3"...
roottim (2002-04-15 11:38:00) [11]+ если вместо % использовать "_" это укажет на 1 произвольный символ, % дает нное кол-ао
roottim (2002-04-15 11:35:00) [12]Johnmen © (15.04.02 11:01) прав
% это всеравно что маска!
Johnmen (2002-04-15 11:01:00) [13]>Anatoly Podgoretsky © :
Согласен, что запрос действительно чуден.
Но он решает проблему, и можно утверждать, что будут отобраны все записи, в которых типа ...1...2...3...4...
Последний % тоже нужен, ведь за 4 м.б. что-то еще...
Anatoly Podgoretsky (2002-04-15 10:44:00) [14]Johnmen © (15.04.02 10:40)
Вообще то тебе, но не буду утверждиать, так как в такой форме не видел запросов, но если ты гарантируешь, что это именно так, вернет только 1234 в данной последовательности и ничего другого то задача решена. Правда мне кажется, что последний % в этом случае ошибка.
Johnmen (2002-04-15 10:40:00) [15]>Anatoly Podgoretsky © : Это ты мне ? Если да, то вернет все записи, в которых встречается 1,2,3,4 именно в такой последовательности и разделенные любым количеством любых символов или не разделенные вовсе...
kalex77 (2002-04-15 10:34:00) [16]select * from art
where
art like "%1%"
or
art like "%2%"
or
art like "%3%"
or
art like "%4%"
;
Anatoly Podgoretsky (2002-04-15 10:30:00) [17]Это вернет м 1234 и 4321 м abc1
хотя это можно использовать как первичное условие, а затем наложить локальный фильтр
Johnmen (2002-04-15 09:32:00) [18]SELECT * FROM TBL WHERE FLD LIKE "%1%2%3%4%"
Deniz (2002-04-15 06:30:00) [19]
> DPetrovich © (13.04.02 19:49)
Так не получится, потому как запрос ... where ART like str2... обработает только str2("1234"), а 12-34 туда не попадет.
Здесь поможет только сканирование, причем я так понимаю что порядок (1234 или 1243) тоже играет роль.
DPetrovich (2002-04-13 19:49:00) [20]Возможно можно сделать следующим образом.
Создаём в Delphi функцию, которой в качестве параметра передаётся строка типа "1.23_4"
function TForm1.Strforlike(s1: string): string;
var i,s: integer; str1: string;
set1: set of char;
begin
set1:=["1","2","3","4","5","6","7","8","9","0"];
str1:="%";
for i:=0 to length(s1) do
if s1[i] in set1
then str1:=str1+s1[i]+"%";
result:=str1;
end;
И тогда можно в запросе написать where ART like str2 {=Strforlike(s1)} ...