C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблема с кодировкой
Oper01
Отправлено: 13.10.2006, 13:59


Станционный диспетчер

Группа: Участник
Сообщений: 145



Здравствуйте.

Подключаюсь к базе dBase через BDE. Все русские буквы в гриде отображает кракозябрами.
Как решить проблему с досовской кодировкой ?
Admin
Отправлено: 13.10.2006, 14:26


Владимир

Группа: Администратор
Сообщений: 1190



Или настройки драйвера в BDE (LANGDRIVER)
или CharToOem() OemToChar()
Oper01
Отправлено: 13.10.2006, 14:31


Станционный диспетчер

Группа: Участник
Сообщений: 145



Изменения в LANGDRIVER вообще ни к чему не приводят.
Подскажите как через OemToChar ?
Спасибо.
AVC
Отправлено: 13.10.2006, 14:32


Ветеран

Группа: Модератор
Сообщений: 1583



Открываю DBF в C++Builder 5. Туплю.
Русские поля в DBF
Сортировка Query, Сортировка Query ORDER BY
Oper01
Отправлено: 16.10.2006, 07:38


Станционный диспетчер

Группа: Участник
Сообщений: 145



Здравствуйте.
Функция OemToChar() тоже не помогает.
Что делать ?
olegenty
Отправлено: 16.10.2006, 07:54


Ветеран

Группа: Модератор
Сообщений: 2412



а что уже сделано и не привело к требуемому результату?
Admin
Отправлено: 16.10.2006, 08:01


Владимир

Группа: Администратор
Сообщений: 1190



+ свойство Transliterate в false

QUOTE
Подключаюсь к базе dBase через BDE. Все русские буквы в гриде отображает кракозябрами.


А через что не отражается кракозябликами ?
Oper01
Отправлено: 16.10.2006, 08:39


Станционный диспетчер

Группа: Участник
Сообщений: 145



Изменения в LABGDRIVER в BDE не приводят к результату.
В поиске по форуму были рекомендации исправления в реестре nls1252 на 1251 не привело ни к чему.
Изменения в свойствах грида Font->Charset тоже не помогает.
OemToChar не помогает. (какие-то изменения есть, а всё равно не кирилица).

А отображается таблица нормально, если её открыть через NC встроенными средствами.

Arsa
Отправлено: 16.10.2006, 09:17


Дежурный стрелочник

Группа: Участник
Сообщений: 77



Я знаю как тебе помочь!
У тебя бдэшка большая? Да, то сделай ее поменьше и выкладывай ее на форрум.

Посмотрим, что получется.
olegenty
Отправлено: 16.10.2006, 09:17


Ветеран

Группа: Модератор
Сообщений: 2412



ну так значит кодовая страница твоих DBF = 866

значит и посредством LANGDRIVER можно ситуацией рулить, и ты делал это неправильно как-то. значит, и Oem2Char должно к требуемому результату приводить, и именно ты применил функцию как-то неверно
Oper01
Отправлено: 16.10.2006, 10:31


Станционный диспетчер

Группа: Участник
Сообщений: 145



Не понимаю что не так делаю.
Прикладываю файл если у кого-то получится выделить на меня время.

Спасибо.

User Attached Image Скачать файл
LIFTARH.zip


Admin
Отправлено: 16.10.2006, 10:51


Владимир

Группа: Администратор
Сообщений: 1190



FoxPro

Transliterate оставляем по-умолчанию true.
TableType = ttFoxPro

в BDE: Diver — Native — FoxPro — Langdriver = dBASE RUS cp866
Admin
Отправлено: 16.10.2006, 11:07


Владимир

Группа: Администратор
Сообщений: 1190



И вариант c OemToChar тоже работает.

Оставляем Langdriver для FoxPro прежним — 'ascii' ANSI
TableType = ttFoxPro

CODE

// Oem To Char
AnsiString toANSI(const char *Text)
{
AnsiString str = Text;
OemToChar(Text, str.c_str());
return str;
}
//----------

// у текстового поля, которое должно отражаться без кракозябликов
void __fastcall TForm1::Table1IMJGetText(TField *Sender, AnsiString &Text,
bool DisplayText)
{
Text = toANSI(Table1IMJ->AsString.c_str());
}
//---------------------------------------------------------------------------


Какой из вариантов вам подходит — решайте сами, оба имеют и плюсы и минусы.
Oper01
Отправлено: 16.10.2006, 11:18


Станционный диспетчер

Группа: Участник
Сообщений: 145



Спасибо за помощь.
А как вы поняли что нужно TableType = ttFoxPro ?

И с OemToChar воткнул, тоже всё нормально.
Спасибо ещё раз.
Admin
Отправлено: 16.10.2006, 11:32


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE
А как вы поняли что нужно TableType = ttFoxPro ?


FoxPro файлы базы данных имеют DBF-расширение.
Работал с ними.

Вернуться в Работа с базами данных в C++Builder