![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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)