Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

Где проблема с рус.кодировкой - в FB 1.5.3 или EhLib 3.6?   Найти похожие ветки 

 
bumper   (2006-07-27 01:14) [0]

Например...
Есть таблица 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 08:45) [1]

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

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

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

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


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

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

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

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


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


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

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


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


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

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


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

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


 
atruhin ©   (2006-07-27 15:34) [5]

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

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


 
PEAKTOP ©   (2006-07-27 19:24) [6]


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

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

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

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


 
atruhin ©   (2006-07-27 19:49) [7]

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



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

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.122 c
2-1157703974
P2P
2006-09-08 12:26
2006.10.01
Помогите перевести конструкцию с C++


6-1147016467
Windows
2006-05-07 19:41
2006.10.01
ICQ клиент на Win API


2-1157741398
lobach
2006-09-08 22:49
2006.10.01
Компонент


1-1156172149
Fay
2006-08-21 18:55
2006.10.01
THintWindow.CalcHintRect


2-1158215420
Ola
2006-09-14 10:30
2006.10.01
Строки