|
Как заставить 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-й байт и работала с явно указанной кодировкой. Для Дельфей, помню, были такие.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |