zaboy |
Отправлено: 07.11.2004, 02:47 |
|
Не зарегистрирован
|
Привет! Такая проблема:
Для нормального отображения русских букв в DBGrid'e при чтении данных из файла dbf приходится использовать событие OnGetText и функцию перекодировки OemToChar...
Далее формирую запрос к двум связанным таблицам типа:
select FAM,IMA,OTC,VNO,NSO,VID from ANK,SOS
where ANK.VNO=SOS.NSO and SOS.VID='01' and SOS.PPO is NULL
order by FAM
Так вот сортировка идет по первым буквам фамилий, а начиная со второй буквы сортирвка идет вразнобой, т.е. Акимов, Авдеев, Быков, Баринов......
Помогите плиз!
|
|
AVC |
Отправлено: 08.11.2004, 09:42 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Каким компонентом работаете?
Для начала нужно настроить правильную перекодировку — решение зависит от компонента. Может то что на экране вразнобой на самом деле правильно, но в другой кодировке? |
|
zaboy |
Отправлено: 08.11.2004, 20:26 |
|
Не зарегистрирован
|
Использую компоненты Query, DataSource и DBGrid.
Код обработчика перекодировки:
void __fastcall TForm1::MyGetText(TField *Sender, AnsiString &Text, bool DisplayText)
{
char s[300];
if(Sender->IsNull) {Text=""; return;}
Sender->GetData(s, true);
OemToChar(s,s);
Text=s;
}
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Query1FAM->OnGetText = MyGetText;
Query1IMA->OnGetText = MyGetText;
Query1OTC->OnGetText = MyGetText;
}
просто советы по правке реестра (про NLS) не помогают, пришлось писать функцию...
Изначально кодировка DOS'овская.
У меня тоже была идея о том, что сортировка верная, но отображение некорректное как раз из-за того, что была произведена перекодировка...
Но тут я застопорился... |
|
Nick |
Отправлено: 09.11.2004, 08:52 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
Во всех компонентах
Font->CharSet = OEM_CHARSET;
100% не гарантирую, глубоко с этим не работал,
попробуй. |
|
AVC |
Отправлено: 09.11.2004, 09:42 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Для BDE поиграйтесь языковыми настройками BDE Administrator. Как только в SQL Explorer станет информация по-русски то и в вашем приложении она станет по-русски. Обычно спасает dBASE RUS cp866
У dbf в заголовке есть специальный байт, отвечающий за язык (применяется в поздних версиях Fox'а) можно помацать его.
После правильной настройки BDE у меня проблем с сортировкой dbf не возникало. Если не получится — положите кусок dbf сюда попробую разобраться.
PS. Желательно этот файл в неправильной кодировка не модифицировать — есть шанс получить разные строки/поля в разных кодировках. |
|