![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Способы сортировки или как отсортировать украинские символы? [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