Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1159766347
СержК
2006-10-02 09:19
2006.11.12
Как поменять кодировку в RxRichEdit


3-1158151719
DBLookupComboBox
2006-09-13 16:48
2006.11.12
и хранимая процедура


1-1159618907
jTommy
2006-09-30 16:21
2006.11.12
Автоматическое сохранение даты и времени компиляции в программе


2-1161991908
Jus
2006-10-28 03:31
2006.11.12
Забыл как переименовать Unit1


2-1161786064
Галинка
2006-10-25 18:21
2006.11.12
Картинки в DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский