Форум: "Базы";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];
ВнизБуквы Е и Ё. Контекстный поиск Найти похожие ветки
← →
Den (2010-02-18 16:08) [0]Помогите решить проблему, есть у меня программа, работает с БД Access, есть контекстный поиск (код ниже). Поиск ищет первую запись совпадающую с условием, потом по кнопке Enter продолжает поиск след. записи совпадающей с условием и т.д. Стоит задача сделать так чтобы буквы Е и Ё в поиске не различались, т.е. набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев"....пока никак не дойду своим умом....
var
FoundRec: Boolean;
FndEdit: string;
Fld_0: TField;
begin
FndEdit := AnsiLowerCase(txtKonSearch.Text);
FoundRec := False;
begin
Fld_0 := DM.tbPhone.FieldByName("name");
if txtKonSearch.Text <> "" then
begin
DM.dsMain.First;
while not DM.dsMain.Eof do
begin
if Fld_0.IsNull then
begin
DM.dsMain.Next;
Continue;
end;
if Pos(FndEdit, AnsiLowerCase(Fld_0.AsString)) > 0 then
begin
FoundRec := True;
break;
end;
DM.dsMain.Next;
end;
if not FoundRec then
begin
DM.dsMain.First;
Application.MessageBox(PChar("Абонент <" + txtKonSearch.Text +
"> не найден"), "Информация", MB_OK + MB_ICONINFORMATION);
end;
end;
← →
12 © (2010-02-18 16:16) [1]
> набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев".
> ...
почему не Щеголёв?
← →
Sergey13 © (2010-02-18 16:29) [2]> [0] Den (18.02.10 16:08)
> т.е. набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев"
А так же Шеглов, Шилов и Птицын. 8-)
← →
Den (2010-02-18 16:38) [3]Нк может я неудачный пример привел.....но вопрос остался
← →
Den (2010-02-18 16:40) [4]
> 12 © (18.02.10 16:16) [1]
Фамилия этого человека пишется правильно именно Щёголев....
← →
Den (2010-02-18 16:40) [5]
> 12 © (18.02.10 16:16) [1]
Фамилия этого человека пишется правильно именно Щёголев....
← →
Jeer © (2010-02-18 16:47) [6]буква епс - давно уже на отбраковке.
Впрочем, как и многие слова.
← →
Sergey13 © (2010-02-18 16:51) [7]> [5] Den (18.02.10 16:40)
Ну так если пользователь правильно напишет, то система правильно найдет.
Но тут за поиск отвечает пользователь, а при перестановках - автор программы.
И например когда деньги уйдут (или спишутся) не Щёголеву, а Щеголёву, то можно и поиметь неприятностей.
Впрочем дело твое. Для поиска вариантов может и неплохо.
← →
12 © (2010-02-18 16:59) [8]ну вот где считает, что равны
> if Pos(FndEdit, AnsiLowerCase(Fld_0.AsString)) > 0 then
т.е. если FndEdit содержится в AnsiLowerCase(Fld_0.AsString)
ну сделай FndEdit2 = замененной е на ё из FndEdit где это нужно
и
if ( Pos(FndEdit, AnsiLowerCase(Fld_0.AsString)) > 0 )
or
( Pos(FndEdit2, AnsiLowerCase(Fld_0.AsString)) > 0 )
then
только вот как ты это _где_нужно_ определишь?
> Фамилия этого человека пишется правильно именно Щёголев.
А микросхемы из Китая могут считать что его правильно зовут Лунь Цзы
← →
Медвежонок Пятачок © (2010-02-18 17:21) [9]Found := ExecRegExpr("(?i)ще|ёголев",Field.AsString)
первый аргумент формировать на основе введенного юзером значения.
введенное юзером "щеголев" или "щёголев" преобразовывать перед поиском в "(?i)ще|ёголев"
← →
Медвежонок Пятачок © (2010-02-18 17:35) [10]либо вообще тупо и просто:
заменяем в текущей проверяемой строке фамилии все "ё" на "е"
то же самое делаем в строке поиска.
а дальше обычный ансикомпаретекст.
воистину
"чтоб так петь - двадцать лет учиться надо"
← →
12 © (2010-02-18 17:46) [11]
> заменяем в текущей проверяемой строке фамилии все "ё" на
> "е"
> то же самое делаем в строке поиска.
не, у всех меняем фамилии на "ИТОГО" и не паримся %)
← →
Den (2010-02-18 22:42) [12]Чпачибо буду думать))
← →
Den (2010-02-18 22:44) [13]Тьфуты ))) Клава глючит. Спасибо хотел сказать ))
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2011.11.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c