|
Помогите прочесть dbf файл | ☑ | ||
---|---|---|---|---|
0
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;"; |
|||
3
SSSSS_AAAAA
18.09.17
✎
17:21
|
(2) При этом оба указанных драйвера надо сначала установить, они не штатные.
|
|||
4
SSSSS_AAAAA
18.09.17
✎
17:29
|
(0) Сам файлик покажи, попробуем определить в каком конкретно он формате.
|
|||
5
Dimon1089
18.09.17
✎
20:42
|
Вот файлик
http://my-files.ru/ih40wv |
|||
6
Dimon1089
18.09.17
✎
20:49
|
||||
7
Dimon1089
18.09.17
✎
20:53
|
(1) Выбивает ошибку
ФайлDBF.ОткрытьФайл(ПутьКФайлу,,Истина); // открытие файла по причине: Формат файла отличен от .DBF |
|||
8
SSSSS_AAAAA
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
отличаются типизацией полей |
|||
10
Dimon1089
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(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; |
|||
11
Dimon1089
18.09.17
✎
21:46
|
(9) Мне нужен первоначальный формат. Так как DBF в течении дня заполняется.
|
|||
12
Йохохо
18.09.17
✎
21:50
|
(10) об этом в (3) предупреждали
https://www.microsoft.com/en-us/download/details.aspx?id=14839&e6b34bbe-475b-1abd-2c51-b5034bcdd6d2=True |
|||
13
ils108
19.09.17
✎
04:52
|
у меня такая ошибка уходила при запуске под админскими правами. и когда в дбф ридере каком-нить таблица открыта, тоже ругался. закрываешь таблицу все работает
|
|||
14
Emery
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(Соединение); |
|||
18
SSSSS_AAAAA
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
|
Это всё оттуда осталось.
|
|||
22
Dimon1089
19.09.17
✎
11:40
|
Всем спасибо))) Пошло)))
|
|||
23
Dimon1089
19.09.17
✎
11:50
|
(16) Ошибка при установке значения атрибута контекста (ActiveConnection)
Command.ActiveConnection = ОлеДБ; по причине: Произошла исключительная ситуация (ADODB.Command): Для требуемой операции необходим объект OLE DB Session, не поддерживаемый текущим проводником. Провайдер установил |
|||
24
Ёпрст
19.09.17
✎
11:52
|
(23) см (17)
|
|||
25
SSSSS_AAAAA
19.09.17
✎
11:53
|
(19) Сия настройка стоит по умолчанию и потому явное ее указание - перебор. Если таки у вас она вдруг почему-то имеет другое значение, то это повод разобраться с настройками винды.
|
|||
26
SSSSS_AAAAA
19.09.17
✎
11:53
|
(23) Откуда взялось
Command.ActiveConnection = ОлеДБ; ? |
|||
27
Dimon1089
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(); |
|||
29
Dimon1089
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
|
Он у тя хотя бы дбф редактором каким открывается ?
|
|||
32
Dimon1089
21.09.17
✎
10:56
|
CDBF открывается
|
|||
33
Dimon1089
21.09.17
✎
10:56
|
(32) CDBF открывается
|
|||
34
Ёпрст
21.09.17
✎
11:06
|
(32) оледб откуда скачал хоть ? Там иссылка была
|
|||
35
Ёпрст
21.09.17
✎
11:09
|
и выложи файло, которое не читается
|
|||
36
Dimon1089
21.09.17
✎
11:11
|
(35) (5) это файлик
|
|||
37
Dimon1089
21.09.17
✎
11:12
|
(34) оледб уже встроена была
|
|||
38
Dimon1089
21.09.17
✎
11:13
|
(34) когда пересохраняю файлик все прекрасно работает
|
|||
39
Ёпрст
21.09.17
✎
11:15
|
(38) значит смотри, чем отличается заголовок
|
|||
40
Ёпрст
21.09.17
✎
11:16
|
Или пробуй с другим провайдером, например, Microsoft.ACE.OLEDB.12.0
|
|||
41
Dimon1089
21.09.17
✎
11:16
|
немного не понял, какой заголовок
|
|||
42
Ёпрст
21.09.17
✎
11:18
|
(41) смотри, чем отличается заголовок файла до правки в дбф редакторе и после.
|
|||
43
Dimon1089
21.09.17
✎
11:25
|
(42) да вот именно ничем я на его пересахронил
|
|||
44
Dimon1089
21.09.17
✎
11:27
|
(42) а можно как нибудь написать в 1с чтобы автоматом пересохронял файлс другим именем и менялся формат?
|
|||
45
Ёпрст
21.09.17
✎
11:28
|
(44) проще взять другого поставщика. Или изначально создавать файло в нужном формате.
|
|||
46
Dimon1089
21.09.17
✎
11:30
|
(45) этот файл загружается из другой программы
|
|||
47
Йохохо
21.09.17
✎
11:32
|
||||
48
Dimon1089
21.09.17
✎
11:42
|
(47) Типом поменялся до сохранения тип: Unknown после FoxBASE+/Dbase III plus, no memo
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |