Форум: "Базы";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизКодировка в 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c