Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Кодировка в FoxPro через ADO   Найти похожие ветки 

 
kaif ©   (2006-09-11 17:39) [0]

Вижу таблицы FoxPro через ADO.
Проблема с кодировкой.
Очень похоже, что таблицы в кодировке 866.
Как в ADO изменить кодировку?
добавление Locale Identifier=866 в строку соединения не помогло.
:(
Помогите, кто может.


 
kaif ©   (2006-09-11 17:49) [1]

Попробовал навесить обработчик на TField.GetText - вроде работает:

procedure TForm1.ADOQuery2name1GetText(Sender: TField; var Text: String;
 DisplayText: Boolean);
var
 PText: PChar;
begin
 GetMem(PText, Sender.Size + 1);
 try
   OemToChar(PChar(Sender.AsString), PText);
   Text := StrPas(PText);
 finally
   FreeMem(PText);
 end;
end;


Но это довольно смешно...
Хотелось бы найти более грамотный вариант.


 
sniknik ©   (2006-09-11 20:19) [2]

ветка реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase
ключ
DataCodePage
если стоит значение ANSI поменяй на OEM, если OEM то на ANSI (по идее у тебя счас ANSI).


 
Anatoly Podgoretsky ©   (2006-09-11 20:28) [3]

Вообще то у него OEM (OemToChar)


 
sniknik ©   (2006-09-11 21:03) [4]

ага, значит и в настройке должно быть OEM, иначе будут кракозябры, что похоже и наблюдается, почему и сказал
> (по идее у тебя счас ANSI).


 
sniknik ©   (2006-09-11 21:04) [5]

в смысле стоит в настройках


 
kaif ©   (2006-09-11 21:47) [6]

Очень интересно...
Да у меня вообще-то половина таблиц в 866, а половина - в 1251 закодирована.
Замена значения ключа в реестре ничего не дала.
Да и непонятно, что она должна дать, если таблицы нужно и те и те видеть..
Я то включаю, то выключаю свой обработчик (в зависимости от кодировки конкретной таблицы).

Составлю список и буду видно руками перекодировать на лету. :(

Мне нужно импорт сделать из всего этого вороха таблиц.
Их там вообще-то 230 штук.
Правда я сократил их кол-во до 120, выкинув таблицы, не содержащие данных или содержащие техническую информацию прежней системы.

Самое неприятное, что одну здоровую таблицу с миллионом записей этот ADO на среднем компьютере 8 минут открывает. На хорошем - три с половиной минуты.
:(


 
Anatoly Podgoretsky ©   (2006-09-11 23:11) [7]

sniknik ©   (11.09.06 21:03) [4]
Вот теперь понял, что ты говорил про настройку, а не кодировку


 
sniknik ©   (2006-09-11 23:51) [8]

> Да у меня вообще-то половина таблиц в 866, а половина - в 1251 закодирована.
половина dBase, другая Foxpro?
> Да и непонятно, что она должна дать, если таблицы нужно и те и те видеть..
вообщето должна была описаный в [0]/[1] вариант исправить... про второй случай и мешанину разных ничего не было.

> Самое неприятное, что одну здоровую таблицу с миллионом записей этот ADO на среднем компьютере 8 минут открывает.
ну так. клиент серверная технология небось... перекачивает на "клиента" ;о) при открытии.

в принципе, тут можно помочь, например использовать Jet, ему можно "локальное" открытие настроить, открывать будет быстро, но вот что ты будеш с раpными кодировками делать? (у Jet-а есть 2 варианта, описаны выше, у фокса один, в принципе можно варьировать... один настроить в "противовес" другому и будет 2 нужных варианта, но фокс не умеет как Jet локально открывать... парадокс). запарка...

ну и главное, зачем тут нужно ADO, если используются локальные таблици да еще и открываются (не запросы)? это же натхудший вариант из возможных. BDE было бы лучше, или любой движок "замена BDE" работающий со старыми таблицами dbf, которые и открывают таблицу простым открытием файла (моментально), и для перекодировок собственные свойства имеют (например TranslateASCII в Halcyon).
нет, выберем самое неподходяшее и давай "парится"... ;)


 
ANB ©   (2006-09-12 10:14) [9]


> kaif ©   (11.09.06 17:39)

Нарывался на такую проблему. Это происходит из-за того, что сбита кодировка в заголовке таблицы. Настройками сия проблема не решается. Оптимальный способ - выставить в таблице верную кодировку (прямым обращением к файлу).


 
ANB ©   (2006-09-12 10:15) [10]


> или любой движок "замена BDE"

что то не нашел я замен, которые позволяют делать запросы к этим таблицам.


 
ANB ©   (2006-09-12 10:16) [11]


> BDE было бы лучше

Не помогает при этой проблеме. BDE тоже смотрит на байт кодировки.


 
sniknik ©   (2006-09-12 11:02) [12]

> что то не нашел я замен, которые позволяют делать запросы к этим таблицам.
зачем запросы если далается открытие?
> "одну здоровую таблицу с миллионом записей этот ADO на среднем компьютере 8 минут открывает."
не выборка из нее заметь, а просто открытие, т.е. работа идет локальными методами. (на клиент серверном методе доступа...)

хотя и с поддержкой sql встречался... когда надо было и искал. но мне он не подошол по другим причинам, т.что дальше прочтения описания к нему не пошол.

> Не помогает при этой проблеме. BDE тоже смотрит на байт кодировки.
возможно, не пробовал на BDE (или вернее забыл, с BDE вообще не долго обшался и уже давно), а Jet похоже не смотрит (т.е. если в таблици OEM и в настройках тоже, то открывало всегда правильно, хотя таблицы бывали из различных источников и наверняка разными байтами кодировок)


 
ANB ©   (2006-09-12 11:44) [13]


> а Jet похоже не смот

Я нативным драйвером открывал. Он точно смотрит.


 
Reindeer Moss Eater ©   (2006-09-12 12:02) [14]

>Хотелось бы найти более грамотный вариант.

Скорее всего его просто нет.
Например для BDE есть дефолтные настройки для DBase, но еще есть реакция на явно указанную кодировку в заголовке. Все бы было замечательно если бы не встречались файлы в ОЕМ кодировке, в заголовке у которых написано что кодировка - анси.

Я,замучившись бороться с этим,всегда перед импортом правил заголовок, полагаясь на то, что 90% дибейа - все же же в ОЕМ.
Правда это тоже чревато, так как в разных версиях дибейса кодировка указывается по разному. Где-то это просто 30-й байт, а где-то она указана несколькими байтами в виде строки.


 
ANB ©   (2006-09-12 12:10) [15]


> встречались файлы в ОЕМ кодировке, в заголовке у которых
> написано что кодировка - анси.

Во во. Частенько FoxPro такой лурью маялся. Точнее он просто этот байт нулил - ему то все равно пофигу. Он и не знал про другие кодировки.


 
Anatoly Podgoretsky ©   (2006-09-12 14:41) [16]

ANB ©   (12.09.06 12:10) [15]
А если байт обнулен, то ни о каком языке таблицы и говорить не приходится - это машинная кодировка.

Reindeer Moss Eater ©   (12.09.06 12:02) [14]
Для dBase и русского - 100 процентов, поскольку dBase не поддерживает ANSI для русского.
И еще надо добавить, что Борланд плевал на dBase и язык таблицы.


 
Anatoly Podgoretsky ©   (2006-09-12 14:43) [17]

Reindeer Moss Eater ©   (12.09.06 12:02) [14]
а где-то она указана несколькими байтами в виде строки.

Это ты про dBase VII - так они еще дальше там плюнули, на language driver это поле тип шрифта


 
Reindeer Moss Eater ©   (2006-09-12 15:43) [18]

Если он плюёт, то как тогда объяснить такой феномен:
Берем FAR и жмем на файле dbase <F3> . Путем последовательного нажатия F8 видим, что внутри дибейса все в OEM (cp866). В глобальных параметрах BDE для дибейса установлено dBase Rus cp866. В заголовке самого файла тридцатый байт ненулевой.
Открываем таблицу и видим каракули. Сбрасываем байт в ноль (использовать параметры по умолчанию) - видим кириллицу.


 
Anatoly Podgoretsky ©   (2006-09-12 18:28) [19]

Я не знаю, что такое тридцатый байт, за язык таблицы отвечает 29



Страницы: 1 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.044 c
2-1161860298
i-am-vladko
2006-10-26 14:58
2006.11.12
Кодировки


3-1158059416
___oleg
2006-09-12 15:10
2006.11.12
Access - как отличить полную дату от неполной


15-1162025655
Zlodey
2006-10-28 12:54
2006.11.12
DirectX Help me !!!


15-1161237904
brother
2006-10-19 10:05
2006.11.12
исследование чужих окошек


15-1161900291
ArtemESC
2006-10-27 02:04
2006.11.12
Си - чего ему не нравится?