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

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

Способы сортировки или как отсортировать украинские символы? [D6, Firebird 1.0]


zorik ©   (2006-07-20 14:08:00) 

Как указать способ сортировки украинских символов? Как, я понял нужно создавать свой COLLATION ORDERS. По ссылкам из книги "Мир InterBase" ничего путного не нашел.


zorik   (2006-07-20 17:24:00) [1]


> Lexer ©   (20.07.06 16:36) [4]


сортировка не локальная


Lexer   (2006-07-20 16:36:00) [2]

Из документации FB:

На правильную сортировку национальных символов, как правило, влияет два параметра - набор символов (CHARSET) и порядок сортировки (COLLATION). И даже при правильно выставленных этих параметрах на уровне БД и запросов, вы можете обнаружить, что TpFIBDataSet сортирует их неправильно. Дело в том, что при локальной сортировке по
умолчанию используется простой метод сортировки без сравнения национальных кодировок.
Так, как если бы был указан неопределенный набор символов (NONE).
В компоненте TpFIBDataSet существует возможность сортировки в соответствии с
национальной кодировкой. Установить альтернативный метод сравнения строковых полей
можно при помощи свойства OnCompareFieldValues. Существуют три готовых метода для
Ansi- сортировки:
protected function CompareFieldValues(Field:TField;const S1,S2:variant):integer;
virtual;
public function AnsiCompareString(Field:TField;const val1, val2: variant):
Integer;
public function StdAnsiCompareString(Field:TField;const S1, S2: variant):
Integer;
AnsiCompareString будет учитывать регистр символов, а StdAnsiCompareString будет,
наоборот, игнорировать регистр.
pFIBDataSet1.OnCompareFieldValues := pFIBDataSet1.AnsiCompareString;
pFIBDataSet1.OnCompareFieldValues := pFIBDataSet1.StdAnsiCompareString;
По умолчанию для CompareFieldValues вы можете установить один из стандартных
методов, либо написать свой, если ни один из готовых вам не подходит.


zorik   (2006-07-20 16:33:00) [3]


> Виталий Панасенко   (20.07.06 15:51) [2]


сортировка всеравно неправильная, "і""а", "б", ...


Виталий Панасенко   (2006-07-20 15:51:00) [4]

Есть у меня
program ToWin1251;                                              

// Программа, внедряет в табливы сортровки, и перевода в верхний, и
// нижний регистры, Interbase 5.0 - 6.0 поддержку украинского языка.
//
// Для работы программы скопируйте ее в один дирректорий с файлом
// gdsintl.dll и запустите.
//
// После чего работайте как и раньше с collate pxw_cyrl.win1251.
//
// create database "test.gdb" default character set win1251; - создание.
// select upper(fam collate pxw_cyrl) from s_empl; - выборка с upper.
// select * from s_empl order by fam collate pxw_cyrl; - выборка с сортировкой.
// И т.д.
//
// (с) STAR LEADER   01.04.2000.
// Гаврильев Сергей.
// press@cruizer.poltava.ua
//
// P.S. И не надейтесь, это не первоапрельская шутка, просто день хороший :).


Desdechado   (2006-07-20 15:39:00) [5]

Врать не буду, поэтому только направлю на ibase.ru
Вроде, в FB1.5 уже есть украинский COLLATE


Наверх

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