Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Помогите прочесть dbf файл

Помогите прочесть dbf файл
Я
   Dimon1089
 
18.09.17 - 17:02
Не могу прочесть DBF файл
АДО = Новый COMОбъект("ADODB.Connection");// Создание COM-объекта

АДО.Open("Provider=Microsoft.Jet.OLEDB.4.0;
         |Data Source=""D:\"";
         |Extended Properties=dBASE III");
БД = АДО.Execute("Select * from Bd_ppsp'");//

Выбивает ошибку:
БД = АДО.Execute("Select * from Bd_ppsp'");// запрос с получением всех записей из файла MyFile.DBF
по причине:
Произошла исключительная ситуация (Microsoft JET Database Engine): Внешняя таблица не имеет предполагаемый формат.
Исправлял dBASE III на dBASE IV тоже самое.
 
 
   Волшебник
 
Модератор
1 - 18.09.17 - 17:03
Используй объект XBase, встроенный в платформу 1С
   Ёпрст
 
2 - 18.09.17 - 17:17
(0)
пробуй через оледб

Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Mode=Read;Exclusive=No;Collating Sequence=MACHINE;TABLEVALIDATE TO 0";

или так:
Соединение = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + КаталогИБ + ";Mode=Share Deny None;Extended Properties=dBase IV;";
   SSSSS_AAAAA
 
3 - 18.09.17 - 17:21
(2) При этом оба указанных драйвера надо сначала установить, они не штатные.
   SSSSS_AAAAA
 
4 - 18.09.17 - 17:29
(0) Сам файлик покажи, попробуем определить в каком конкретно он формате.
   Dimon1089
 
5 - 18.09.17 - 20:42
Вот файлик 
http://my-files.ru/ih40wv
   Dimon1089
 
6 - 18.09.17 - 20:49
   Dimon1089
 
7 - 18.09.17 - 20:53
(1) Выбивает ошибку 
ФайлDBF.ОткрытьФайл(ПутьКФайлу,,Истина);// открытие файла

по причине:
Формат файла отличен от .DBF
   SSSSS_AAAAA
 
8 - 18.09.17 - 21:05
(7) Это FOXPRO. Используй первый вариант из (2). Драйвер искать на сайте мелкомягких по слову VFP OLEDB Provider. Драйвер только 32-битный, работать с ним, соответственно, только из 32-битной платформы.
   Йохохо
 
9 - 18.09.17 - 21:24
попробуй этот загрузить https://cloud.mail.ru/public/M9rp/iLbjrm9Y6
отличаются типизацией полей
   Dimon1089
 
10 - 18.09.17 - 21:43
(8)  Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанного поставщика. Вероятно, он установлен неправильно.


КаталогИБ = "D:\Bd_ppsp.dbf";
СтрокаСоединения = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Mode=Read;Exclusive=No;Collating Sequence=MACHINE;TABLEVALIDATE TO 0";
  
    
    Соединение = Новый ComObject("ADODB.Connection");
    Соединение.ConnectionString = СтрокаСоединения;
    Попытка
        Соединение.Open();
        
    Исключение
        Сообщить(ОписаниеОшибки());
        
    КонецПопытки;
 
 Рекламное место пустует
   Dimon1089
 
11 - 18.09.17 - 21:46
(9) Мне нужен первоначальный формат. Так как DBF в течении дня заполняется.
   Йохохо
 
12 - 18.09.17 - 21:50
   ils108
 
13 - 19.09.17 - 04:52
у меня такая ошибка уходила при запуске под админскими правами. и когда в дбф ридере каком-нить таблица открыта, тоже ругался. закрываешь таблицу все работает
   Emery
 
14 - 19.09.17 - 08:17
(0) > Не могу прочесть DBF файл

Способов доступа к dbf  из 1C вагон и маленькая тележка. Самый простой путь воспользоваться советом Волшебника: «Используй объект XBase, встроенный в платформу 1С». Для любителей изощренных способов можно почитать тут http://www.sql.ru/forum/601874/vs-rabota-s-dbf . Там речь идет о «семерке», но это не принципиальный момент.

Для общего развития могу сказать, что dbf без бинарного заголовка это обычный текст в формате sdf (поля фиксированной ширины без разделителей). Это намек, как можно работать с dbf без специализированных средств. Кстати, формат заголовка dbf хорошо известен и его легко сгенерировать самому ( http://emery-emerald.narod.ru/Cpp/2E14.html ).

В качестве лирического отступления могу рассказать о достоинствах и недостатках dbf-файлов. Об относительных преимуществах речь идет тут: http://www.sql.ru/forum/1212962/otnositelnye-preimushhestva-dbf-faylov , а про недостатки можно добавить то, что поле размера файла заголовка dbf является главным подозреваемым на вывод из строя жесткого диска нашего нетбука. Речь идет о моем драйвере для считывателей rfid-карт сотрудников при учете рабочего времени ( http://emery-emerald.narod.ru/Others/ElPath.html ). Там драйвер создает и заполняет dbf-файл во время считывания карточек пользователей. Эти считыватели китайские и шли безо всякого сопроводительного ПО, зато позволяли легко программировать собственное. Выбор формата dbf обусловливался удобством его дальнейшего использования в собственной конфигурации 1С77 по учету рабочего времени. Так вот главной моей ошибкой было то, что из-за необходимости заполнять поле размера файла в заголовке dbf, головка записи жесткого диска вынуждена была интенсивно дергаться из начала файла в конец и обратно (поскольку при входе / выходе на / с работы шел интенсивный обмен данных сотрудников со считывателями). Со временем файл данных сильно увеличился и головка диска явно подвергалась избыточным перегрузкам. В итоге это ожидаемо привело к выходу из строя жесткого диска, хотя пару лет он прослужил, а вот его «брат» близнец, работает до сих пор, поскольку обслуживает другой участок, где поток пользователей на порядок меньше.

В итоге, жесткий диск мы поменяли, а драйвер я переделал. Теперь он создает простой текстовый файл в формате sdf. Головка диска работает только на допись, соответственно никакой избыточной нагрузки. А работать в конфигурации с текстовыми файлами ничуть не сложнее, чем с dbf. При желании можно даже генерировать в «семерке» основу для кодировки UTF-8, например, собственные xml-файлы (иногда это сделать гораздо удобнее без использования штатных средств).

Ну и в заключении «раз пошла такая пьянка» скажу, что текстовый sdf-формат дает наводку на вопрос: А зачем вообще использовать заголовки в отдельных файлах баз данных, если их вполне можно вынести в отдельный файл для целой sdf-группы данных? Это плавно подводит нас к идее базы данных ориентированной на представление через колонки, а не строки. Т.е., не несколько строк в одном файле, а несколько колонок в одном файле (либо даже одна колонка в одном файле, как в самой крутой по производительности опенсорной базе данных «ClickHouse» от Яндекса).

Это все к тому, как можно далеко зайти от невинного вопроса ТС :) .
   Ёпрст
 
15 - 19.09.17 - 09:50
(11)

Вот с такой строкой твой файл прекрасно читается:
    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Collating Sequence=MACHINE";

если че, win 2012 x64
   Ёпрст
 
16 - 19.09.17 - 09:53
КаталогИБ = "F:\"; // тут свой путь воткнешь + в системе должен быть установлен vfp провайдер, вот отсюда, к примеру:
    //  http://www.microsoft.com/downloads/details.aspx?FamilyId=E1A87D8F-2D58-491F-A0FA-95A3289C5FD4&displaylang=en
   ОлеДБ = Новый COMОбъект("ADODB.Connection");
    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Collating Sequence=MACHINE";
    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = ОлеДБ;
    ТекстЗапроса = "select * from BD_PPSP.DBF";
    Command.CommandText = ТекстЗапроса;     
    RecordSet = Новый COMОбъект("ADODB.RecordSet");     
    RecordSet.cuRsortype = 1;  
    RecordSet.cuRsorlocation = 3;  
    RecordSet = Command.Execute();
    Если not RecordSet.EOF() Тогда
        RecordSet.MoveFirst();
        Пока RecordSet.EOF() = 0 Цикл
            Сообщить(RecordSet.Fields.Item("DTV").Value);
            RecordSet.MoveNext();  
        КонецЦикла;
    КонецЕсли;
    RecordSet.Close();
   Ёпрст
 
17 - 19.09.17 - 09:55
+
    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Collating Sequence=MACHINE";
    ОлеДБ.Open(Соединение);
   SSSSS_AAAAA
 
18 - 19.09.17 - 11:07
(15) (16) (17) + ";Collating Sequence=MACHINE"
совершенно бесполезная дописка ибо нужна только и исключительно при создании индексов.
   Ёпрст
 
19 - 19.09.17 - 11:31
(18) не только при создании
   Ёпрст
 
20 - 19.09.17 - 11:32
   Ёпрст
 
21 - 19.09.17 - 11:33
Это всё оттуда осталось.
   Dimon1089
 
22 - 19.09.17 - 11:40
Всем спасибо))) Пошло)))
   Dimon1089
 
23 - 19.09.17 - 11:50
(16) Ошибка при установке значения атрибута контекста (ActiveConnection)
    Command.ActiveConnection = ОлеДБ;
по причине:
Произошла исключительная ситуация (ADODB.Command): Для требуемой операции необходим объект OLE DB Session, не поддерживаемый текущим проводником.
Провайдер установил
   Ёпрст
 
24 - 19.09.17 - 11:52
(23) см (17)
   SSSSS_AAAAA
 
25 - 19.09.17 - 11:53
(19) Сия настройка стоит по умолчанию и потому явное ее указание - перебор. Если таки у вас она вдруг почему-то имеет другое значение, то это повод разобраться с настройками винды.
   SSSSS_AAAAA
 
26 - 19.09.17 - 11:53
(23) Откуда взялось
Command.ActiveConnection = ОлеДБ; ?
   Dimon1089
 
27 - 20.09.17 - 17:06
(24) (26) Ошибка при вызове метода контекста (Execute)
    RecordSet = Command.Execute();
по причине:
Произошла исключительная ситуация (ADODB.Command): Невозможно использование подключения для выполнения операции. Оно закрыто или не допускается  в данном контексте.
  

КаталогИБ = "D:\"; 
       ОлеДБ = Новый COMОбъект("ADODB.Connection");
    //Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Collating Sequence=MACHINE";

    Command = Новый COMОбъект("ADODB.Command");
    //Command.ActiveConnection = ОлеДБ;

    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Collating Sequence=MACHINE";
    ОлеДБ.Open(Соединение);
    ТекстЗапроса = "select * from BD_PPSP.DBF";
    Command.CommandText = ТекстЗапроса;     
    RecordSet = Новый COMОбъект("ADODB.RecordSet");     
    RecordSet.cuRsortype = 1;  
    RecordSet.cuRsorlocation = 3;  
    RecordSet = Command.Execute();
    Если not RecordSet.EOF() Тогда
        RecordSet.MoveFirst();
        Пока RecordSet.EOF() = 0 Цикл
            Сообщить(RecordSet.Fields.Item("DTV").Value);
            RecordSet.MoveNext();  
        КонецЦикла;
    КонецЕсли;
    RecordSet.Close();
   Ёпрст
 
28 - 20.09.17 - 17:22
(27)
    КаталогИБ = "F:\";// тут свой путь воткнешь + в системе должен быть установлен vfp провайдер, вот отсюда, к примеру:

    ОлеДБ = Новый COMОбъект("ADODB.Connection");
    Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ + ";Collating Sequence=MACHINE";
    ОлеДБ.Open(Соединение);
    Command = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection = ОлеДБ;
    ТекстЗапроса = "select * from BD_PPSP.DBF";
    Command.CommandText = ТекстЗапроса;     
    RecordSet = Command.Execute();
    Если not RecordSet.EOF() Тогда
        RecordSet.MoveFirst();
        Пока НЕ RecordSet.EOF() Цикл
            Сообщить(RecordSet.Fields.Item("DTV").Value);
            RecordSet.MoveNext();  
        КонецЦикла;
    КонецЕсли;
    RecordSet.Close();
   Dimon1089
 
29 - 21.09.17 - 10:54
(28) Ошибка при вызове метода контекста (Execute)
RecordSet = Command.Execute();
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for Visual FoxPro): d:\dbf\bd_ppsp.dbf is not a table.

vfp установлен
DBF находится в папке d:\dbf\
   Ёпрст
 
30 - 21.09.17 - 10:55
(29) тот файл что в (6) читается.
   Ёпрст
 
31 - 21.09.17 - 10:55
Он у тя хотя бы дбф редактором каким открывается ?
   Dimon1089
 
32 - 21.09.17 - 10:56
CDBF открывается
   Dimon1089
 
33 - 21.09.17 - 10:56
(32) CDBF открывается
 
 
   Ёпрст
 
34 - 21.09.17 - 11:06
(32) оледб откуда скачал хоть ? Там иссылка была
   Ёпрст
 
35 - 21.09.17 - 11:09
и выложи файло, которое не читается
   Dimon1089
 
36 - 21.09.17 - 11:11
(35) (5) это файлик
   Dimon1089
 
37 - 21.09.17 - 11:12
(34) оледб уже встроена была
   Dimon1089
 
38 - 21.09.17 - 11:13
(34) когда пересохраняю файлик все прекрасно работает
   Ёпрст
 
39 - 21.09.17 - 11:15
(38) значит смотри, чем отличается заголовок
   Ёпрст
 
40 - 21.09.17 - 11:16
Или пробуй с другим провайдером, например, Microsoft.ACE.OLEDB.12.0
   Dimon1089
 
41 - 21.09.17 - 11:16
немного не понял, какой заголовок
   Ёпрст
 
42 - 21.09.17 - 11:18
(41) смотри, чем отличается заголовок файла до правки в дбф редакторе и после.
   Dimon1089
 
43 - 21.09.17 - 11:25
(42) да вот именно ничем я на его пересахронил
   Dimon1089
 
44 - 21.09.17 - 11:27
(42) а можно как нибудь написать в 1с чтобы автоматом пересохронял файлс другим именем и менялся формат?
   Ёпрст
 
45 - 21.09.17 - 11:28
(44) проще взять другого поставщика. Или изначально создавать файло в нужном формате.
   Dimon1089
 
46 - 21.09.17 - 11:30
(45) этот файл загружается из другой программы
   Йохохо
 
47 - 21.09.17 - 11:32
   Dimon1089
 
48 - 21.09.17 - 11:42
(47) Типом поменялся до сохранения тип: Unknown после FoxBASE+/Dbase III plus, no memo


Список тем форума
Рекламное место пустует  Рекламное место пустует
AdBlock убивает бесплатный контент. 1Сергей
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует