Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск [D5, Paradox]


Страницы:   1 2

Филиппов Стас ©   (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)} ...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо