Имя: Пароль:
1C
1С v8
Как заставить VFPOLEDB.1 открывать DBF в нужной кодировке?
0 Rounder
 
04.11.13
15:43
Форум читал. Решения не нашел.

Собственно проблема в том, что если в заголовке 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 sttt
 
04.11.13
15:59
чем не устраивает?
------------------
XBase (XBase)
Кодировка (Encoding)
Использование:

Чтение и запись.
Описание:

Тип: КодировкаXBase.
Определяет режим кодировки базы.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.
2 Rounder
 
04.11.13
16:06
Тем, что мне нужен общий доступ к файлу. А XBase работает только монопольно.
3 oleg_km
 
04.11.13
16:39
(3) Ничего не поможет. Фокспро ориентируется только по этой метке. Я когда писал на фокспре, открывал ДБФ своей функцией, которая сначала проверяла, установлен ли байт, если нет устанавливала, потом открывала
4 kiruha
 
04.11.13
16:44
CPDBF() что возвращает ?
Конфигурационный файл делал ?
Почему не 1251 ?
5 Rounder
 
04.11.13
16:50
(4)
CPDBF() возвращает 0.
Конф. файл я так понимаю должен лежать рядом с DBF - я не имею права там что-либо создавать или менять.
6 kiruha
 
04.11.13
16:53
Здесь небольшой по подключению для 1С
http://www.1cpp.ru/forum/YaBB.pl?num=1237895266/
7 kiruha
 
04.11.13
16:58
Навскидку ставишь CODEPAGE=1251 и будет счастье
8 Rounder
 
04.11.13
17:02
Прочел.
Не взлетит.
До открытия темы игрался с этими параметрами. Да и при открытии по умолчанию в свойствах соединения указана CODEPAGE=1251.
9 Мимохожий Однако
 
04.11.13
17:05
Скопировать файл во временную папку и открыть через Xbase
10 kiruha
 
04.11.13
17:06
USE МойФайлДБФ
CPDBF() - должно вернуть 866 или 1251
11 Rounder
 
04.11.13
17:07
(9) Возможно с (0) не полно написал. Задача стоит читать из и писать в dbf, лежащую на сети, в режиме совместного доступа.
12 Rounder
 
04.11.13
17:08
(10) спасибо за участие. Пора уже уходить. Завтра вернусь к этой теме - если завтра тоже заглянешь - буду благодарен.
13 Мимохожий Однако
 
04.11.13
17:09
Возможно, в отладчике после соединения можно увидеть некоторые свойства.
14 Rounder
 
04.11.13
17:10
(10) Когда в рабочем окне VFP делаю USE, то т.к. в заголовке файла не указана кодовая таблица, то мне выдается окно для выбора, я отказываюсь от выбора - и получаю соотв. CPDBF() 0. Если выберу кодировку - то заголовок перезапишется. А при работе по сети и программно я это сделать не могу.
15 Rounder
 
04.11.13
17:11
(13) Я смотрел все свойства после соединения - даже когда принудительно ставлю кодовою страницу в строке соединения в свойствах она отображается как я и выставляю. Но из файла тянет кракозяблы вместо русских букв.
16 Мимохожий Однако
 
04.11.13
17:12
Если в копии файла определить кодовую страницу, то потом этот режим вызывать в VFP. Т.е. использовать XBase только для определение страницы и чтения.
17 Мимохожий Однако
 
04.11.13
17:13
Возможно, мешают системные региональные настройки. С другого компьютера пробовал?
18 Rounder
 
04.11.13
17:14
(17) Пробовал.
Знать бы какие именно региональные настройки передернуть.
19 Rounder
 
04.11.13
17:15
XBase не откроет файл если он уже открыт кем-либо. А это почти всегда так.
20 sttt
 
04.11.13
19:35
21 mistеr
 
04.11.13
20:38
(0) И кто же пишет такой кривой файл?
22 Rounder
 
05.11.13
09:13
(20) Читал - не помогает.
(21) Разработчики дососовго ПО.
23 organizm
 
05.11.13
09:22
мне помогло только изменение 29 бита...
24 organizm
 
05.11.13
09:23
+ байта
25 organizm
 
05.11.13
09:24
+ но у меня только чтение
26 Rounder
 
05.11.13
09:24
(23) Для меня это слишком радикальное решение. И в общем-то невыполнимое.
Поэтому пока пробую иные способы - вплоть до перекодировки самих данных на лету.
27 organizm
 
05.11.13
09:27
а как ты на запись на лету будешь перекодировать?
28 Rounder
 
05.11.13
09:31
Ну не на лету - а перед записью строковые данные буду перегонять в нужную кодировку и уж после писать в файл.
29 Кирпич
 
05.11.13
09:34
а вторая программа тоже через VFPOLEDB работает чтоли? если нет, то никакого совместного доступа не будет, будет только бардак. а уж если есть индексы, то вообще кашмар.
30 mistеr
 
05.11.13
12:17
Можно поискать ВК, которая бы плевала на 29-й байт и работала с явно указанной кодировкой. Для Дельфей, помню, были такие.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан