![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поис (без учитывания знаков и символов) [D7, MSSQL]
Jeeb © (2007-04-13 12:02:00)Здравствуйте!
Прошу помочь мне.
Есть Edit, в который вводится значение для поиска в базе. Вводится пользователем в таком виде: AU044093FR.
В то время как в базе значения введены в виде: AU04-409-3FR, причем может быть и другое расположение дефисов (точек, запятых и пр.).
Соответственно, если пользователь вводит без дефисов, то информация отсутствует, нужно, чтобы программа не учитывала различные знаки во время поиска по базе, а учитывала только буквы и цифры.
Заранее благодарен за помощь.
Gadenysh (2007-04-13 13:37:00) [21]ReplaceStr(edit.text, '-', '%') и все
Jeeb (2007-04-13 13:34:00) [22]Эврика!!!!!!!
D:='';
B:=CCode.Text;
while Pos('-', B)>0 do
Delete(B, Pos('-', B), 1);
for I:=1 to Length(B) do
begin
D:=D+B[I]+'%';
end;
Только как бы это организовать, чтоб учитывались не только знаки дефиса...
Спасибо, ЮЮ....
ЮЮ (2007-04-13 13:30:00) [23]ну хотя бы так :)
с := '';
for i := 1 to Length(b) do
c := c + b[i] + '%';
Jeeb (2007-04-13 13:28:00) [24]ЮЮ,
так вот меня и волнует мой алгоритм... я не знаю как по другому сделать, потому сюда и обратился...
Jan1 (2007-04-13 13:28:00) [25]я бы написал простенькую UDF, которая выдерала-бы только числа и буквы.
ЮЮ (2007-04-13 13:26:00) [26]потому что по твоемк алгоритму получишь A%%%%%%%%%%U044093FR
>такая замена не подойдет. так как под % будет понята любая комбинация. и будут лишние записи.
Если есть серри с более чем 10-ю значащими сиволами, поряд 10-ти которых совпал. Такие совпадения, если и будут, то не так страшны, полагаю, чен ненахождение
Jeeb (2007-04-13 13:21:00) [27]Jan1,
а что вставлять вместо %?
Jan1 (2007-04-13 13:21:00) [28]
> LIKE 'A%U%0%4%4%0%9%3%F%R'
такая замена не подойдет. так как под % будет понята любая комбинация. и будут лишние записи.
ЮЮ (2007-04-13 13:20:00) [29]while Pos('-', B) > 0 do
Delete(B, Pos('-', B), 1);
А то получается "до тех пор пока нет сивмола удалять его" :)
Jeeb (2007-04-13 13:20:00) [30]
B:=CCode.Text;
while Pos('-', B)>0 do
Delete(B, Pos('-', B), 1);
for I:=1 to Length(B) do
begin
Insert('%', B, I+1);
end;
Если делать так, то программа не виснет... Но результат поиска - ноль...
Johnmen (2007-04-13 13:18:00) [31]
> что не так?
бесконечный цикл
Sergej (2007-04-13 13:17:00) [32]К (13.04.07 13:11) [23]
вернее 'select * from table where field like '+QuotedStr(findtext);
ЮЮ (2007-04-13 13:17:00) [33]while Pos('-', B) >0 do
Delete(B, Pos('-', B), 1);
for I:=1 to Length(B) do
begin
Insert('%', B, I+1);
end;
Полученное И вставляю в запрос...
А смотрел, что получилось?
Jeeb (2007-04-13 13:12:00) [34]
B:=CCode.Text;
while Pos('-', B)=0 do
Delete(B, Pos('-', B), 1);
for I:=1 to Length(B) do
begin
Insert('%', B, I+1);
end;
Полученное И вставляю в запрос...
При выполнении этого программа виснет, что не так?
Sergej (2007-04-13 13:11:00) [35]Может так:
FindText:='AU04-409-3FR';
FindText := AnsiReplaceStr(FindText,'-','%');
Query.Sql.Text:='select * from table where field='+findtext;
Сергей М. (2007-04-13 13:11:00) [36]
> Jeeb
Именно так и работает довольно известный софт ETKA (интерактивный каталог з/частей VW, Audi и пр.)
Сергей М. (2007-04-13 13:03:00) [37]
> Jeeb (13.04.07 12:36) [11]
Я особо не в курсе, но думаю, что у каждого производителя есть какие-то шаблонные правила уникальной идентификации своей продукции.
И то, что эти правила различны для различных производителей, не является большим припятствием для твоего сабжа. Достаточно знать эти правила, остальное - дело программерской техники)
Предлагаешь юзеру выбрать конкретного производителя (конкретную линейку продукции и т.д. и т.п.), после чего организуешь ввод по соответствующему шаблону. Введенные при этом данные практически готовы для употребления в кач-ве простейшего условия отбора.
Или наоборот - юзер вводит данные как попало, ты выполняешь парсинг введенных данных на предмет их полного или частичного соответствия одному из известных шаблонов. Если ни один шаблон не обнаружен, юзер получает отлуп (сам виноват !), иначе данные приводятся в полное соответствие шаблонным правилам, после чего они точно так же готовы к употреблению при отборе.
ЮЮ (2007-04-13 13:01:00) [38]>Это по сути просто, как в первом классе, просто я не знаю как...
Тогда надо переносить в "Начинающим..." :)
ЮЮ (2007-04-13 13:00:00) [39]>
> Т.е. надо формировать что-то вроде [1], но учитывая и то,
> что дефисы могут присутствовать...
в [13] Дефисы в БД учтены . Правильно введенные дефисы в поле поиска тоже будут учтены. Не учтены тольно неправильно введенные дефисы.
Т.е. нельзя найти AU04-409-3FR по AU-04409-3FR. Если хочешь, чтобы искал и в этом случае, то сначала удали символы-разделители из строки поиска, затем, как в [13]
Jeeb (2007-04-13 12:55:00) [40]ЮЮ,
я могу попробовать именно для AU044093FR, но как сделать удаление всех знаков из Edit, кроме букв и цифр, и добавление знака % после каждого символа..?? сам алгоритм на Delphi мне не понятен... Это по сути просто, как в первом классе, просто я не знаю как...