Проблема кодировки при подключении внешнего источника dBase (*.dbf) через ODBC

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. Alexander.Dyatchenko 28.06.13 03:20 Сейчас в теме
Вопрос: можно ли в строке подключения как-то указать кодовую страницу или использовать vfoxpro драйвер (пробовал - говорит что его нет в системе)
Строка подключения:
Driver={Microsoft dBASE Driver (*.dbf)};
DriverID=277;
Dbq=x:\1S\CopyAC;
Collating Sequence=RUSSIAN;
CODEPAGE=1251;
ANSI=True;
CP=1251;
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
42. zels 171 28.06.13 19:30 Сейчас в теме
А тут: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\xBase

Искал имя параметра "CollatingSequence"
v.l.; maljaev; Casey1984; okulus; +4 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. bzmax 28.06.13 03:36 Сейчас в теме
Первый раз вижу что бы в DBF была кодировка cp1251.
Как правило там DOS-овские кодировки KOI-8(866).
Попробуйте все-таки "поиграть" с кодировками в строке подключения.

Или попробуй такую строку подключения
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + Path + ";" +
"Extended Properties=""DBASE IV;"";"
20. zels 171 28.06.13 14:57 Сейчас в теме
(2) Ни разу dbf-базы от 1С 7.7 не видел?
21. Alexander.Dyatchenko 28.06.13 15:37 Сейчас в теме
(20) zels, Не жалко тебе времени на поддевки.
Давай двигаться в конструктивном направлении.
22. zels 171 28.06.13 16:05 Сейчас в теме
(21), зачем такие сложности с ODBC? Сходу предложу три варианта:
1.Подключайтесь из 8-ки к 1С.77, открывайте справочник и читайте данные.
2.Открывайте файл через XBase и читайте в нужной кодировке.
3.Открываете в Excel, сохраняете в желаемом формате и читаете.
24. bzmax 28.06.13 16:17 Сейчас в теме
(21) Alexander.Dyatchenko,
Хм... смешно но факт.
1) средствами ADO никак не получается нормально кодировку воспроизвести.
2) XBase показывает русский "на ура", но тогда это не внешний источник.
3) Копаю дальше. (просто самому стало интересно как такое может быть?).
23. bzmax 28.06.13 16:14 Сейчас в теме
(20) zels,
Видел, но в обход 1С в их dbf не лазил.
Да и видел то разы, как правило всегда работал с SQL базами.

DBF использовал только как транзит для обмена (пока не появился XML).
25. zels 171 28.06.13 16:22 Сейчас в теме
(23) Для меня заявление, "не видел dbf в windows-кодировке" это примерно как заявление на автомобильном форуме "не видел машин с механической КПП". 1С за 15+ лет заполонила компьютеры dbf-файлами в windows-кодировке. Дос-кодировки в dbf тоже были (1С, например, в "досемерочный" период), но сейчас их встретить гораздо труднее.
27. bzmax 28.06.13 16:50 Сейчас в теме
(25) zels,
А вот такой я, "зажравшийся американец" - всю жизнь на "автомате" катаюсь.
Но это уже другая и в данном случае off-топная история :)
v.l.; igee12; +2 Ответить
3. Alexander.Dyatchenko 28.06.13 03:41 Сейчас в теме
1251 я решил из-за WindbfView - когда в нем 866 выставляю - иероглифы, возвращаю 1251 - все читабельно.
4. bzmax 28.06.13 03:44 Сейчас в теме
(3) Alexander.Dyatchenko,
Для просмотра dbf лучше пользоваться старым-добрым dbfnavigator (бесплатная).
5. Alexander.Dyatchenko 28.06.13 03:44 Сейчас в теме
Попробовал - то же самое.
Прикрепленные файлы:
6. bzmax 28.06.13 03:47 Сейчас в теме
(5) Alexander.Dyatchenko,
То , да не то :)
866 - это OEM
т.е. ANSI=false
8. bzmax 28.06.13 03:49 Сейчас в теме
(5) Alexander.Dyatchenko,
Брось ка по почте maxa.ok@gmail.com этот файл.
Сна все равно нет :) Посмотрю что за чудо такое :)
7. Alexander.Dyatchenko 28.06.13 03:49 Сейчас в теме
И эта программа согласна что не DOS
Прикрепленные файлы:
9. Alexander.Dyatchenko 28.06.13 03:53 Сейчас в теме
Не помагает false.
У меня есть подозрение что параметр ANSI не подходит для этого драйвера.
В карточке ODBC это как порядок сортировки, и там выбор, т.е. ANSI может стоять в параметре ПОСЛЕ знака =
Прикрепленные файлы:
10. Alexander.Dyatchenko 28.06.13 03:59 Сейчас в теме
Файлик другой, но суть та же.
Прикрепленные файлы:
sc14.DBF
11. bzmax 28.06.13 04:17 Сейчас в теме
(10) Alexander.Dyatchenko,
Операционка у тебя какая?
12. Alexander.Dyatchenko 28.06.13 04:55 Сейчас в теме
Тестировал на 2х
Сервер 2008
Win7x64
13. bzmax 28.06.13 05:03 Сейчас в теме
(12) Alexander.Dyatchenko,
Понятно...у них то UTF-8
где то затык в динамической перекодировке для корректного отображения.
14. Stormicon 8 28.06.13 06:10 Сейчас в теме
(12) А Администратор ODBC запускаешь х32 или х64?
15. Alexander.Dyatchenko 28.06.13 06:35 Сейчас в теме
и тот и тот пробовал. на Win7 - 64 открывал. Но ничего интересного там не нашел
16. Stormicon 8 28.06.13 06:42 Сейчас в теме
Код языка в файле указан 0 (1251), то есть получается, что у тебя драйвер не может определить код страницы из самого файла, ему требуется указание вручную
17. Alexander.Dyatchenko 28.06.13 13:32 Сейчас в теме
Подскажите, может другой драйвер можно использовать?
Предложите строку подключения.
Я заргузил обновление vfoxpro но он не хочет использовать этот драйвер...
Например на Win7 такая строка проходит, но не дает результата

DRIVER={Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx)};
Dbq=x:\1S\CopyAC;
CODEPAGE=1251;
ANSI=False;
CP=1251;

А на Windows 2008 выдает ошибку
Прикрепленные файлы:
18. Alexander.Dyatchenko 28.06.13 13:36 Сейчас в теме
А вот подключение vfoxpro дает ошибку:

Driver={Microsoft Visual FoxPro Driver};
SourceType=DBF;
SourceDB=x:\1S\CopyAC;
Exclusive=No;
Collate=Russian;
NULL=NO;
DELETED=NO;
BACKGROUNDFETCH=NO;
Прикрепленные файлы:
19. Alexander.Dyatchenko 28.06.13 13:53 Сейчас в теме
И этот тоже иероглифы выдает
DRIVER={Microsoft dBase-Treiber (*.dbf)};
26. Ёпрст 1063 28.06.13 16:45 Сейчас в теме
(0) для подключения к клюшкам, на пример по адо:

КаталогИБ = "D:\Bases\Торговля\"; // тут свой путь воткнешь + в системе должен быть установлен vfp провайдер, вот отсюда, к примеру:
    //  http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en

    ОлеДБ = Новый COMОбъект("ADODB.Connection");
    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Mode=ReadWrite;Collating Sequence=MACHINE";
    ОлеДБ.Open(Соединение);
    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = ОлеДБ;
    ТекстЗапроса = "
        |select
		|  Спр.descr as Номенклатура,
        |  Спр.sp85 as Артикул,
        |  sum(Рег.sp411) as Остаток
        |from rg405 as Рег
        |left join sc84 as Спр on Спр.id = Рег.sp408
        |where Рег.period= {d '2012-07-01'} 
        |group by Спр.descr,Спр.sp85
        |order by Спр.descr
        |";
    Command.CommandText = ТекстЗапроса;     
    RecordSet = Новый COMОбъект("ADODB.RecordSet");     
    RecordSet = Command.Execute();
    Если not RecordSet.EOF() Тогда
        RecordSet.MoveFirst();
        Пока RecordSet.EOF() = 0 Цикл
            Сообщить(RecordSet.Fields.Item("Номенклатура").Value + " "+RecordSet.Fields.Item("Артикул").Value+" "+RecordSet.Fields.Item("Остаток").Value);
            RecordSet.MoveNext();  
        КонецЦикла;
    КонецЕсли;
    RecordSet.Close();
    RecordSet = Неопределено;
    Command = Неопределено;
Показать
29. bzmax 28.06.13 16:53 Сейчас в теме
(26) Ёпрст, В том то и суть что ему нужно подключиться объектом метаданных "Внешний источник".
Да и потом Provider=VFPOLEDB.1 в стандартных ODBC у Windows нет, нужно доп.драйвера устанавливать.
30. Ёпрст 1063 28.06.13 16:55 Сейчас в теме
(29) odbc никогда нормально не работал с дбф файлами семёрки, только фоксовый провайдер.
Не хотите - не ставьте, хозяин барин.
34. Alexander.Dyatchenko 28.06.13 17:42 Сейчас в теме
(30) Ёпрст, Что такое фоксовый провайдер?

Для остальных "веток" от заданного направления!:
1. Отчет через восьмерку (именно внешние источники) на тех же dbf строиться в 20 раз быстрее!!!
2. Это в 20 раз по отношению к прямым запросам в той же базе!
3. Объем файла 2 Gb через OLE - это грусть.
4. В экселе тот же файл я не смог открыть в правильной кодировке!!! (3 компа)
5. В Access тот же файл я не смог открыть в правильной кодировке.

Давайте разовьем фоксового провайдера - что ставить как коннектить?
36. bzmax 28.06.13 17:50 Сейчас в теме
(34) Alexander.Dyatchenko,

Чисто для того что бы поржать, открыл dbf, который ты выслал в HEX-редакторе.
Не ошибся, долго смеялся от увиденного.
1) По структуре заголовка(служебная часть файла) - это досовская версия таблицы.
2) Сама кодировка таблицы cp1251


Хотя что удивительного... к "перлам" 1С уже давно пора привыкнуть.
28. Ёпрст 1063 28.06.13 16:53 Сейчас в теме
Да, с дбф никогда не пищите запросы с odbc, используйте oledb провайдер - при правильном написании текста запроса с использовании индексов полёт обеспечен.
31. zels 171 28.06.13 17:02 Сейчас в теме
ODBC, ADO... Хлопцы, скажите, чем плох старый добрый способ:
V7=Новый COMОбъект("V77.Application") // или "V77s.Application" для SQL
Попытка
strApp = "/D"""+ТекПутьКБазе+""" /N"""+ТекПользователь+""" /P"""+ТекПароль+"""";
Открыта=V7.Initialize(V7.RMTrade,strApp,"NO_SPLASH_SHOW");
...
Читаем справочники, документы, регистры и пр.
32. Ёпрст 1063 28.06.13 17:06 Сейчас в теме
(31) ОЛЕ - это мегатормоз, это раз, база может быть недоступна, это два.
v.l.; kentavr27; +2 Ответить
33. Ёпрст 1063 28.06.13 17:07 Сейчас в теме
+32 ну и обрыв по таймауту в 2 минуты, это три..
потеря фокуса, это четыре..
в топку олю - это пять!
35. Alexander.Dyatchenko 28.06.13 17:46 Сейчас в теме
Может кто-то ставил внешние драйвера, типа TDBF?
37. zels 171 28.06.13 19:05 Сейчас в теме
(35) HKEY_LOCAL_MACHINE\Software\microsoft\jet\4.0\Engines\Xbase DataCodePade=OEM <== поменяй на ANSI
JohnyDeath; +1 Ответить
38. Alexander.Dyatchenko 28.06.13 19:13 Сейчас в теме
нет такой ветки в реесте.
Ни на Win7 ни на 2008
39. zels 171 28.06.13 19:16 Сейчас в теме
(38) Alexander.Dyatchenko, у меня XP. А просто поискать раздел Jet\4.0\Engines ?
43. Alexander.Dyatchenko 28.06.13 19:32 Сейчас в теме
(39) zels, ТВОЕ РЕШЕНИЕ. Блин вроде просто с виду!!!
Блнннн... Ветка находилась:
[18:31:01] Dyatchenko Alexander: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\xBase
там то и поменял на ANSI DataCodePage.
Спасибо Zels.
maljaev; okulus; +2 Ответить
40. Alexander.Dyatchenko 28.06.13 19:20 Сейчас в теме
хотя пакет драйверов доступа я установил вот отсюда (32bit)
http://www.microsoft.com/en-us/download/details.aspx?id=13255
Может из-за этого и JET драйвер и не работает?
41. Alexander.Dyatchenko 28.06.13 19:30 Сейчас в теме
ДА!!!!!!!!!!!!!!!!!!!!!!
СУПЕР!!!!!!!!!!!!!!!!!
42. zels 171 28.06.13 19:30 Сейчас в теме
А тут: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\xBase

Искал имя параметра "CollatingSequence"
v.l.; maljaev; Casey1984; okulus; +4 Ответить
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день