Как заставить VFPOLEDB.1 открывать DBF в нужной кодировке? #686806


#0 by Rounder
Форум читал. Решения не нашел. Собственно проблема в том, что если в заголовке DBF-ки 29-й байт не  установлен в 65(HEX), а в файле есть строковые значения с русскими  буквами - получаю "кракозяблы". Установить это байт в нужное значения -  не имею права (файл сетевой и не я его "хозяин"). Ради примера взял два одинаковых файла по содержимому, отличие в  лишь в том, что в одном файле 29-й байт установлен в нужное значение, а в  другом - нет. Соединяюсь так: Соединение = Новый COMОбъект("ADODB.Connection"); Соединение.Open("Provider=VFPOLEDB.1;Data Source=" + ПутьСпр + ";Collating Sequence=MACHINE;EXCLUSIVE=NO"); Как и "положено", в одном случае получаю кириллический символы, в  другом "кракозяблы". При этом сравнил все свойства Соединение, для обоих  файлов они абсолютно идентичны (ну кроме ID сесси - это понятно). Т.о.  получаем, что значение этого байта в свойствах не отображается и я не  могу на него повлиять устанавливая параметры подключения (но изначально  пробовал и Collating Sequence=RUSSIAN и CODEPAGE=866 - не помогло). Как же заставить провайдера читать данные в нужной мне кодировке?
#1 by sttt
чем не устраивает? ------------------ XBase (XBase) Кодировка (Encoding) Использование: Чтение и запись. Описание: Тип: КодировкаXBase. Определяет режим кодировки базы. Доступность: Тонкий клиент, сервер, толстый клиент, внешнее соединение.
#2 by Rounder
Тем, что мне нужен общий доступ к файлу. А XBase работает только монопольно.
#3 by oleg_km
Ничего не поможет. Фокспро ориентируется только по этой метке. Я когда писал на фокспре, открывал ДБФ своей функцией, которая сначала проверяла, установлен ли байт, если нет устанавливала, потом открывала
#4 by kiruha
CPDBF что возвращает ? Конфигурационный файл делал ? Почему не 1251 ?
#5 by Rounder
CPDBF возвращает 0. Конф. файл я так понимаю должен лежать рядом с DBF - я не имею права там что-либо создавать или менять.
#6 by kiruha
Здесь небольшой по подключению для 1С
#7 by kiruha
Навскидку ставишь CODEPAGE=1251 и будет счастье
#8 by Rounder
Прочел. Не взлетит. До открытия темы игрался с этими параметрами. Да и при открытии по умолчанию в свойствах соединения указана CODEPAGE=1251.
#9 by МимохожийОднако
Скопировать файл во временную папку и открыть через Xbase
#10 by kiruha
USE МойФайлДБФ CPDBF - должно вернуть 866 или 1251
#11 by Rounder
Возможно с не полно написал. Задача стоит читать из и писать в dbf, лежащую на сети, в режиме совместного доступа.
#12 by Rounder
спасибо за участие. Пора уже уходить. Завтра вернусь к этой теме - если завтра тоже заглянешь - буду благодарен.
#13 by МимохожийОднако
Возможно, в отладчике после соединения можно увидеть некоторые свойства.
#14 by Rounder
Когда в рабочем окне VFP делаю USE, то т.к. в заголовке файла не указана кодовая таблица, то мне выдается окно для выбора, я отказываюсь от выбора - и получаю соотв. CPDBF 0. Если выберу кодировку - то заголовок перезапишется. А при работе по сети и программно я это сделать не могу.
#15 by Rounder
Я смотрел все свойства после соединения - даже когда принудительно ставлю кодовою страницу в строке соединения в свойствах она отображается как я и выставляю. Но из файла тянет кракозяблы вместо русских букв.
#16 by МимохожийОднако
Если в копии файла определить кодовую страницу, то потом этот режим вызывать в VFP. Т.е. использовать XBase только для определение страницы и чтения.
#17 by МимохожийОднако
Возможно, мешают системные региональные настройки. С другого компьютера пробовал?
#18 by Rounder
Пробовал. Знать бы какие именно региональные настройки передернуть.
#19 by Rounder
XBase не откроет файл если он уже открыт кем-либо. А это почти всегда так.
#21 by mistеr
И кто же пишет такой кривой файл?
#22 by Rounder
Читал - не помогает. Разработчики дососовго ПО.
#23 by organizm
мне помогло только изменение 29 бита...
#24 by organizm
+ байта
#25 by organizm
+ но у меня только чтение
#26 by Rounder
Для меня это слишком радикальное решение. И в общем-то невыполнимое. Поэтому пока пробую иные способы - вплоть до перекодировки самих данных на лету.
#27 by organizm
а как ты на запись на лету будешь перекодировать?
#28 by Rounder
Ну не на лету - а перед записью строковые данные буду перегонять в нужную кодировку и уж после писать в файл.
#29 by Кирпич
а вторая программа тоже через VFPOLEDB работает чтоли? если нет, то никакого совместного доступа не будет, будет только бардак. а уж если есть индексы, то вообще кашмар.
#30 by mistеr
Можно поискать ВК, которая бы плевала на 29-й байт и работала с явно указанной кодировкой. Для Дельфей, помню, были такие.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С