Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Вниз

Где проблема с рус.кодировкой - в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
2-1157707015
aromasloru
2006-09-08 13:16
2006.10.01
Болезнь имеет запах!


5-1140106590
misha_gr
2006-02-16 19:16
2006.10.01
Грамотное управление HintWindow


2-1157949541
Dr. Genius
2006-09-11 08:39
2006.10.01
Аномальные явления в функциях шифрации/дешифрации строк


1-1156165096
laurely
2006-08-21 16:58
2006.10.01
Работа с тонким клиентом


1-1155908985
VEZ
2006-08-18 17:49
2006.10.01
Отмена ввода в TTreeView.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский