-
Помогите решить проблему, есть у меня программа, работает с БД 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;
-
> набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев". > ...
почему не Щеголёв?
-
> [0] Den (18.02.10 16:08) > т.е. набрав фамилию "Щеголев" поиск должен найти запись с "Щёголев"
А так же Шеглов, Шилов и Птицын. 8-)
-
Нк может я неудачный пример привел.....но вопрос остался
-
> 12 © (18.02.10 16:16) [1]
Фамилия этого человека пишется правильно именно Щёголев....
-
> 12 © (18.02.10 16:16) [1]
Фамилия этого человека пишется правильно именно Щёголев....
-
буква епс - давно уже на отбраковке. Впрочем, как и многие слова.
-
> [5] Den (18.02.10 16:40)
Ну так если пользователь правильно напишет, то система правильно найдет. Но тут за поиск отвечает пользователь, а при перестановках - автор программы. И например когда деньги уйдут (или спишутся) не Щёголеву, а Щеголёву, то можно и поиметь неприятностей. Впрочем дело твое. Для поиска вариантов может и неплохо.
-
ну вот где считает, что равны
> 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
только вот как ты это _где_нужно_ определишь?
> Фамилия этого человека пишется правильно именно Щёголев.
А микросхемы из Китая могут считать что его правильно зовут Лунь Цзы
-
Found := ExecRegExpr('(?i)ще|ёголев',Field.AsString)
первый аргумент формировать на основе введенного юзером значения.
введенное юзером 'щеголев' или 'щёголев' преобразовывать перед поиском в '(?i)ще|ёголев'
-
либо вообще тупо и просто:
заменяем в текущей проверяемой строке фамилии все "ё" на "е" то же самое делаем в строке поиска. а дальше обычный ансикомпаретекст.
воистину "чтоб так петь - двадцать лет учиться надо"
-
> заменяем в текущей проверяемой строке фамилии все "ё" на > "е" > то же самое делаем в строке поиска.
не, у всех меняем фамилии на "ИТОГО" и не паримся %)
-
Чпачибо буду думать))
-
Тьфуты ))) Клава глючит. Спасибо хотел сказать ))
|