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

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

Где проблема с рус.кодировкой - в FB 1.5.3 или EhLib 3.6? [D7, FireBird 1.5.3]


bumper ©   (2006-07-27 01:14:00) 

Например...
Есть таблица KATULIC c названиями улиц:
ID            Name
 1        Пушкинская
 2        Лермонтова
 3        Ломоносова
 4        Ленина
и т.п. Таблица имеет индекс по полю NAME.

в других табоицах используются lookup-поля для доступа к названию улицы. При создании базы использовал WIN1251.
В IBDataBase1.Params перед коннектом написал: lc_ctype=WIN1251, не уверен что так надо, но где-то видел :)

В DBGridEh в соотв. колонке, или в DBLookupComboboxEh есть выпадающий список для ввода названия улицы.

Собственно  проблема: При нажатии на буковку выпадает список с названиями. Если там англицкие названия, проблем никаких и регистр побоку, но если мне надо улицу Ломоносова, то нажатие маленькой "л" ни к чему не приводит, если с шифтом, то позиционируется на букву "Л". Но следующую надо тоже писать в верхнем регистре и достаточно быстро, можно успеть набрать 3 символа - дальше позиционировние не происходит. Если в базе все русские большие и на клавиатуре набирать большие - тож ок......
Короче, надо чтоб и в русских символах можно было плевать на регистр.
Кого здесь винить: себя, FB или EhLib?
Поясните кто что может по сабжу.


atruhin   (2006-07-27 19:49:00) [1]

А так: :)
SELECT ... FROM MYTABLE TB WHERE (TB.NAME COLLATE PXW_CYRL LIKE ''%' + AnsiUpperCase(TextToFind) + '%'') ORDER BY TB.NAME


PEAKTOP   (2006-07-27 19:24:00) [2]


> atruhin ©   (27.07.06 15:34) [5]
> FB умеет сортировать независимо от регистра, скорость при этом не снижается.
>

А мне не сотрировать надо. В 90% случаев приходится пользоваться конструкцией

 .....
 IBQuery1.SQL.Text := ' SELECT... FROMMYTABLE TB WHERE(TB.NAME LIKE''%' + AnsiUpperCase(TextToFind) + '%'') ORDER BY TB.NAME ';
 ....

А между запросами
b>SELECT ... FROMMYTABLE TB WHERE(TB.NAME LIKE''%' + AnsiUpperCase(TextToFind) + '%'') ORDER BY TB.NAME
и
b>SELECT ... FROMMYTABLE TB WHERE( UPPER(TB.NAME) LIKE''%' + AnsiUpperCase(TextToFind) + '%'') ORDER BY TB.NAME
две большие разницы по скрости на ~40 000 позиций с справочнике ТМЦ.


atruhin   (2006-07-27 15:34:00) [3]

> [2] PEAKTOP ©   (27.07.06 11:00)

Не лучший вариант, особенно учитывая, что FB умеет сортировать независимо от регистра, скорость при этом не снижается.


bumper   (2006-07-27 15:09:00) [4]

Всё товарищи :), проблема отпала и была как всегда во мне :))))))
Параметры конекта, в том числе и кодировку, прописывал в IBDataBase.Params в дизайнере, а и упустил, что они у меня в рантайме из ини-файла берутся....:)


bumper   (2006-07-27 14:59:00) [5]


> Читать до полного просвятления, там все написано:

... читаю, надеюсь просветлит :)


> Я, например, вообще в базах на каждую таблицу справочник
> вешаю триггеры, чтобы записи хранились в верхнем регистре,
>  типа


Пробовал, Не совсем эстетично выглядят на экране все большие.....тем более что адрес формируется во многих местах из этих улиц....
Можно извратов сделать и обратно преобразовывать  - для отображения, чтоб первая большая, остальные малелькие, но тоже не выход:
ул. Карла Маркса, пер.Фридриха Энгельса, пл.Советских моряков и т.п.  + есть ещё аббревиатуры ГОБК, МОПРа - они не вписываются в общую картину....

Вобщем, раз нет проблемы в софте, ищу что упустил......


PEAKTOP   (2006-07-27 11:00:00) [6]

Те таблицу-справочник "KATULIC" надо в верхнем регистре выбирать.
Я, например, вообще в базах на каждую таблицу справочник вешаю триггеры, чтобы записи хранились в верхнем регистре, типа

CREATE TRIGGER TRIG$MYTALE_BI_000 FOR MYTABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
 NEW.NAME = UPPER(NEW.NAME);
END

Тогда и ищет быстрее, особенно если хочется сделать наворот  в стиле "1С:Предприятие", когда в справочнике нажимаешь пробел, а затем набираешь буквы. По мере набора курсор НД позиционируется на первой подходящей записи, начинающейся на эту последовательность символов.


atruhin   (2006-07-27 08:45:00) [7]

> Где проблема с рус.кодировкой

Нет такой проблеммы, ни там, ни там :)

Читать до полного просвятления, там все написано:

http://www.ibase.ru/devinfo/ibrusfaq.htm


Наверх

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