Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
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;
Первый раз вижу что бы в DBF была кодировка cp1251.
Как правило там DOS-овские кодировки KOI-8(866).
Попробуйте все-таки "поиграть" с кодировками в строке подключения.
Или попробуй такую строку подключения
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + Path + ";" +
"Extended Properties=""DBASE IV;"";"
(21), зачем такие сложности с ODBC? Сходу предложу три варианта:
1.Подключайтесь из 8-ки к 1С.77, открывайте справочник и читайте данные.
2.Открывайте файл через XBase и читайте в нужной кодировке.
3.Открываете в Excel, сохраняете в желаемом формате и читаете.
(21) Alexander.Dyatchenko,
Хм... смешно но факт.
1) средствами ADO никак не получается нормально кодировку воспроизвести.
2) XBase показывает русский "на ура", но тогда это не внешний источник.
3) Копаю дальше. (просто самому стало интересно как такое может быть?).
(23) Для меня заявление, "не видел dbf в windows-кодировке" это примерно как заявление на автомобильном форуме "не видел машин с механической КПП". 1С за 15+ лет заполонила компьютеры dbf-файлами в windows-кодировке. Дос-кодировки в dbf тоже были (1С, например, в "досемерочный" период), но сейчас их встретить гораздо труднее.
9.
Alexander.Dyatchenko
28.06.13 03:53 Сейчас в теме
Не помагает false.
У меня есть подозрение что параметр ANSI не подходит для этого драйвера.
В карточке ODBC это как порядок сортировки, и там выбор, т.е. ANSI может стоять в параметре ПОСЛЕ знака =
Код языка в файле указан 0 (1251), то есть получается, что у тебя драйвер не может определить код страницы из самого файла, ему требуется указание вручную
17.
Alexander.Dyatchenko
28.06.13 13:32 Сейчас в теме
Подскажите, может другой драйвер можно использовать?
Предложите строку подключения.
Я заргузил обновление vfoxpro но он не хочет использовать этот драйвер...
Например на Win7 такая строка проходит, но не дает результата
КаталогИБ = "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 = Неопределено;
(26) Ёпрст, В том то и суть что ему нужно подключиться объектом метаданных "Внешний источник".
Да и потом Provider=VFPOLEDB.1 в стандартных ODBC у Windows нет, нужно доп.драйвера устанавливать.
Для остальных "веток" от заданного направления!:
1. Отчет через восьмерку (именно внешние источники) на тех же dbf строиться в 20 раз быстрее!!!
2. Это в 20 раз по отношению к прямым запросам в той же базе!
3. Объем файла 2 Gb через OLE - это грусть.
4. В экселе тот же файл я не смог открыть в правильной кодировке!!! (3 компа)
5. В Access тот же файл я не смог открыть в правильной кодировке.
Давайте разовьем фоксового провайдера - что ставить как коннектить?
Чисто для того что бы поржать, открыл dbf, который ты выслал в HEX-редакторе.
Не ошибся, долго смеялся от увиденного.
1) По структуре заголовка(служебная часть файла) - это досовская версия таблицы.
2) Сама кодировка таблицы cp1251
Хотя что удивительного... к "перлам" 1С уже давно пора привыкнуть.
Да, с дбф никогда не пищите запросы с odbc, используйте oledb провайдер - при правильном написании текста запроса с использовании индексов полёт обеспечен.
ODBC, ADO... Хлопцы, скажите, чем плох старый добрый способ:
V7=Новый COMОбъект("V77.Application") // или "V77s.Application" для SQL
Попытка
strApp = "/D"""+ТекПутьКБазе+""" /N"""+ТекПользователь+""" /P"""+ТекПароль+"""";
Открыта=V7.Initialize(V7.RMTrade,strApp,"NO_SPLASH_SHOW");
...
Читаем справочники, документы, регистры и пр.
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.