Вниз
Скачать: CL | DM;

loCaseInsensitive   Найти похожие ветки 

 
TrainerOfDolphins ©   (2006-09-15 12:26) [0]

Добрый день!
Таблица содержит фамилии, которые, естественно, начинаются с большой буквы. Надо найти человека по первой букве фамилии.
IBTable.Locate("Surname",s,[loPartialKey,loCaseInsensitive]) - ничего не находит. Скажите, подалуйста, в чём здесь может быть причина.


 
stone ©   (2006-09-15 12:31) [1]


> Скажите, подалуйста, в чём здесь может быть причина.

1. такой фамилии нет
2. в таблицу загружены не все записи
3. включен фильтр


 
TrainerOf Dolphins   (2006-09-15 12:38) [2]

Такая фамилия есть. Записи все. Никаких фильтров.
Таблица проиндексированна по полю Surname.
Если нажать вместе с буквой Shift, то запись находится, что вроде говорит о том, что loCaseInsensitive игнорируется...


 
Anatoly Podgoretsky ©   (2006-09-15 13:03) [3]

TrainerOf Dolphins   (15.09.06 12:38) [2]
Это все слова.


 
TrainerOf Dolphins   (2006-09-15 13:14) [4]

2 Anatoly Podgoretsky
Что Вы имеете в виду?


 
Anatoly Podgoretsky ©   (2006-09-15 13:30) [5]

То что приведена неполная информация.


 
TrainerOf Dolphins   (2006-09-15 13:45) [6]

Ну не знаю. Charset win1251. Если это имеет значените.
Метод  Locate вызываю в обработчике OnKeyPress DBGrid-а.
Что ещё нужно?


 
Сергей М. ©   (2006-09-15 13:51) [7]

Цитата из справки:

If the search fields in KeyFields are indexed and the index is compatible with the specified search options, Locate uses the index. Otherwise Locate creates a filter for the search.

А теперь думай..


 
TrainerOf Dolphins   (2006-09-15 14:03) [8]

Вот. Это уже ближе к делу...
Очень внимаьельно прочитал. Подумал. Но выводов пока сделать не могу... Индекс по полю SURNAME не совместим с LocateOptions? С чего бы это?


 
Сергей М. ©   (2006-09-15 14:09) [9]

Ой вру.

Проблема скорей всего из-за "кривизны" работы UPPER в конкретной реализации IB-совместимого сервера. А проблема эта довольно известна.


 
TrainerOf Dolphins   (2006-09-15 14:16) [10]

И что делать?
Можно так:
   s:= Key;
   s:= AnsiUpperCase(s);
   IBTable.Locate("Surname",s,[loPartialKey,loCaseInsensitive]) ;
Но нужно ли...


 
Сергей М. ©   (2006-09-15 14:39) [11]


> TrainerOf Dolphins   (15.09.06 14:16) [10]
>
> И что делать?


Для начала убедиться, что сформированное компонентом TIBTable при вызове метода Locate() SQL-предложение действительно не возвращает ни одной записи.

См TIBSQLMonitor

Если так, то либо сменить IB-совместимый сервер на другой (где UPPER заведомо работоспособно) либо писать свою UDF (или использовать любую готовую), корректно реализующую сабж.


 
TrainerOf Dolphins   (2006-09-15 14:57) [12]

Спасибо.
Такого конкретного ответа мне и хотелось...:)



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.039 c
1-1156764443
Mameluke
2006-08-28 15:27
2006.10.08
Масштабирование окна


3-1154942212
cosmos
2006-08-07 13:16
2006.10.08
не проходит запрос INSERT INTO в ACCESS


15-1158584053
Layner
2006-09-18 16:54
2006.10.08
В каком формате справку к программе писать?


2-1158512716
POP
2006-09-17 21:05
2006.10.08
WaitCommEvent(ComFile,Mask,@Overlapped)


15-1158559506
Stexen
2006-09-18 10:05
2006.10.08
соглашение о передаче параметров




   Наверх