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

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

Locate и loCaseInsensitive не работает с русскими буквами [D6, IB6.x, Firebird]


SPIDERus ©   (2004-02-16 09:23:00) 

Поиск записи по первым буквам, которые берем из Edit'а. Поиск должен быть не чуйствительным к регистру.

IBTable1.Locate('NAME',Edit1.text,[loCaseInsensitive,loPartialKey]);

Проблема:
loCaseInsensitive не работает с русскими буквами.
С английскими все ОК.


Zacho   (2004-02-26 13:54:00) [1]


> SPIDERus   (26.02.04 12:38) [6]

И в дополнение к Johnmen ©   (26.02.04 12:58) [7]:

Еще раз повторяю, версия FB здесь абсолютнони причем !!!


Johnmen   (2004-02-26 12:58:00) [2]

Всё там есть ! См. реализацию InternalLocate.


SPIDERus   (2004-02-26 12:38:00) [3]

2Zacho
Уменя в FIBDataSet.pas написано:


function TFIBCustomDataSet.Locate(const KeyFields: string;
 const KeyValues: Variant; Options: TLocateOptions): Boolean;
var
 CurBookmark: String;
begin
 DisableControls;
 DoBeforeScroll;
 DisableScrollEvents;
 Result := false;
 try
   CurBookmark := Bookmark;
   First;
   result := InternalLocate(KeyFields, KeyValues,
    TExtLocateOptions(Options)
   );
   if not result then
     Bookmark := CurBookmark;
 finally
   EnableScrollEvents;
   if Result then DoAfterScroll;
   EnableControls;
 end;
end;


Как видно, AnsiUpperCase и AnsiPos там нет.

2Всем
Люди, у кого корректно работает loCaseInsensitive с IBTable1.Locate с русскими буквами скажите какая у вас версия Firebird и какие у вас заплатки.


Zacho   (2004-02-25 07:41:00) [4]


> SPIDERus   (25.02.04 07:26) [4]
> Перебор версий IB/Firebird результатов не дал.

И не даст. Проблема не в сервере, а в твоем приложении. Еще раз: смотри исходники IBX, конкретно - метод TIBCustomDataSet.InternalLocate в модуле IBDataSet.pas
В этом методе должны использоваться ф-ции AnsiUpperCase и AnsiPos
А ты уверен, что запись, которую ты ищешь, действительно есть в НД ?


SPIDERus   (2004-02-25 07:26:00) [5]

Перебор версий IB/Firebird результатов не дал.

2Expan:
Я сделал
IBQuery1.Locate('NAME',Edit1.Text,[loCaseInsensitive,loPartialKey]);
А в значение IBQuery1.SQL сделал select NAME from DRUGSУменя поиск перестал работать вообще. Может я чего не так делаю?


Vlad   (2004-02-16 16:12:00) [6]


> Expan   (16.02.04 15:50) [2]

и причем тут RxQuery1 ?
Тут речь идет о методе TIBCustomDataSet


Expan   (2004-02-16 15:50:00) [7]

RxQuery1.Locate('Fam; Name;', VarArrayOf ([EdFam.Text, EdName.Text]),[loCaseInsensitive, loPartialKey]);
у меня по фамилии и части имени ищет без проблем


Zacho   (2004-02-16 09:31:00) [8]

Возможно, баг именно в твоей версии IBX. У меня все работает (провда я использую TIBDataSet, но должно быть без разницы). Посмотри в исходниках IBX метод InternalLocate - там должны использоваться ф-ция AnsiUpperCase (или AnsiLowerCase, не помню), если там просто UpperCase - ставь апдейт IBX (или наоборот, откатывайся на более раннюю версию, или правь исходники IBX)


Наверх

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