Имя: Пароль:
1C
1С v8
Чтение файла Paradox. Ошибка при попытке чтения
0 Dmitriy_S
 
23.03.12
12:01
Знаю, что как читать не раз уже обсуждалось. и поиском искал, но так ничего и не нашел. Написал несколько вариантов кода - ошибка одна и та же "Произошла исключительная ситуация (Microsoft JET Database Engine): Внешняя таблица не имеет предполагаемый формат."


пример 1


   ИмяФайла = "Users.DB";    
   СтрокаПодключения = "Data Source=C:\Baza16\;Extended Properties=Paradox 5.x";
   Провайдер= "Microsoft.Jet.OLEDB.4.0";
   МойЗапрос = "Select * From " + ИмяФайла;

   Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Provider = Провайдер;
   Connection.ConnectionString =  СтрокаПодключения;
   
   Попытка
       Connection.Open();
   Исключение
       Сообщить("Подключение - bad!");
   КонецПопытки;
   
   Command = Новый COMОбъект("ADODB.Command");
   Command.ActiveConnection = Connection;
   Command.CommandText = МойЗапрос;
   Command.CommandType = 1;

   RS = Новый COMОбъект("ADODB.Recordset");
   
   
   Попытка
       RS.Open(Command);
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;

пример 2


   ИмяФайла = "Users.DB";    
   СтрокаПодключения = "Data Source=C:\Baza16\;Extended Properties=Paradox 5.x";
   Провайдер= "Microsoft.Jet.OLEDB.4.0";
   МойЗапрос = "Select * From " + ИмяФайла;

   Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Provider = Провайдер;
   Connection.ConnectionString =  СтрокаПодключения;
   
   Попытка
       Connection.Open();
   Исключение
       Сообщить("Подключение - bad!");
   КонецПопытки;
   
   Command = Новый COMОбъект("ADODB.Command");
   Command.ActiveConnection = Connection;
   Command.CommandText = МойЗапрос;
   Command.CommandType = 1;

   RS = Новый COMОбъект("ADODB.Recordset");
   
   Попытка
       RS = Command.Execute();
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;

Пример 3

   ИмяФайла = "Users.DB";    
   СтрокаПодключения = "Data Source=C:\Baza16\;Extended Properties=Paradox 5.x";
   Провайдер= "Microsoft.Jet.OLEDB.4.0";
   МойЗапрос = "Select * From " + ИмяФайла;

   Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Provider = Провайдер;
   Connection.ConnectionString =  СтрокаПодключения;
   
   Попытка
       Connection.Open();
   Исключение
       Сообщить("Подключение - bad!");
   КонецПопытки;
   
   Command = Новый COMОбъект("ADODB.Command");
   Command.ActiveConnection = Connection;
   Command.CommandText = МойЗапрос;
   Command.CommandType = 1;

   RS = Новый COMОбъект("ADODB.Recordset");
   
   Попытка
       RS.Open(МойЗапрос, Connection );
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;

Операционка Win7 64. Может какую-то библиотеку надо или сам файл кривой? как выяснить что файл кривой? Программа Paradox Viewer 1.98 показывает версия файла 5.0. Данные из файла тоже отображаются. Впервые столкнулся с этим форматом. Знающие люди. не проходите мимо, пожалуйста!
1 Dmitriy_S
 
23.03.12
12:18
Попробую апнуть
2 Deniskind
 
23.03.12
12:29
Соединение = Новый COMОбъект("ADODB.Connection");
   РасположениеБазыДанных = Константы.РасположениеБазыДанныхКомплектация.Получить();
   СтрокаСоединения    = "Provider=Microsoft.Jet.OLEDB.4.0;
   |Jet OLEDB:Database Password="""";
   |Data Source="+РасположениеБазыДанных+";  
   |Extended Properties=Paradox 5.x;
   |";
   Соединение.Open(СтрокаСоединения);    

Вот такая штука работает. Обратите внимание на строку Jet OLEDB:Database Password=""""; Может из-за этого?
3 Zubek
 
23.03.12
12:31
Тут человек говорит мне что ему помогло следующее: "расшаривание" доступа к файлу с:\pdox.net
4 Dmitri888
 
23.03.12
12:33
я читал Paradox через ВК
5 Dmitriy_S
 
23.03.12
12:35
(3) и даже с этой строчкой не помогает
(4) нет возможности ставить дополнительные компоненты пользователям, которым надо будет каждый день грузить файлы. Но для опыта хотелось бы посмотреть как через ВК это делается.
6 Dmitriy_S
 
23.03.12
12:36
(3) даже несмотря на то, что это локальный файл?
7 Dmitriy_S
 
23.03.12
12:39
(3) и даже это не помогло.
8 Deniskind
 
23.03.12
12:39
Залейте куда-нибудь несущественную дб-шку. Попробую ее у себя открыть, чтобы убедиться, что дело в ваших библиотеках.
9 Dmitri888
 
23.03.12
12:42
на правах антирекламы ресурса )) : http://infostart.ru/public/14148/
10 Dmitri888
 
23.03.12
12:44
можно найти на просторах инета и в свободном доступе
11 EasyRider
 
23.03.12
12:45
(0)У меня вот такие строки есть в одной обработке:
   Соединение = Новый ComОбъект("ADODB.Connection");
   СтрокаПодключения="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Лев(ЭлементыФормы.Файл.Значение,3)+";Extended Properties=Paradox 5.x;";
   Соединение.Open(СтрокаПодключения);
Rs = Новый ComОбъект("ADODB.Recordset");    ИмяФайла=СтрЗаменить(ЭлементыФормы.Файл.Значение,Лев(ЭлементыФормы.Файл.Значение,3),"");
   Rs.Open("select * from "+ИмяФайла+";",Соединение);
12 Dmitriy_S
 
23.03.12
12:53
(11) у меня такой способ указан в третьем варианте.
(8) Создал пустой текстовый файл, заменил имя на то с которым работаю - ошибка та же самая выходит.
(9) Там гемморой с внутренней валютой. поищу где-нибудь еще на просторах интернетов.
13 Dmitri888
 
23.03.12
13:06
мыло пиши - сброшу
14 Dmitriy_S
 
23.03.12
13:17
15 Dmitriy_S
 
23.03.12
13:18
Но все же хотелось бы узнать как же можно заставить 1с читать парадоксовские файлы теми способами, которые везде написаны.
16 Deniskind
 
23.03.12
13:46
Попробовал ваш код из 3-го примера на своих данных. Полностью рабочий.
Windows XP.
17 Deniskind
 
23.03.12
13:48
Но, с пустым файлом выдает такое "Непредвиденная ошибка драйвера внешней базы данных (8961)" Видимо, версии ADO разные.
18 Kreont
 
23.03.12
14:35
У меня так читает (что на ВинХП что на Вин7):
БД = Новый ComObject("ADODB.Connection");
Если БД.Open("Driver={Microsoft Paradox Driver (*.db )};DriverID=538;Fil=Paradox 5.X;DefaultDir="+ПутьБД+";Dbq="+ПутьБД+";CollatingSequence=ASCII")= 0 Тогда
   Сообщить("Ошибка....");
   Возврат;
КонецЕсли;
19 Dmitriy_S
 
23.03.12
14:48
(16) можно попросить проверить ни чтение этот файл http://ifolder.ru/29474196
(17) я когда создавал пустой файл вьювер мне писал версию 3.
20 Deniskind
 
23.03.12
15:48
(19) Файл отрывается нормально без ошибок
21 Deniskind
 
23.03.12
15:56
(20) открывается
версия msjetoledb40.dll 4.0 95020
если что еще BDE стоит idapi32.dll 5.0 122
22 Dmitriy_S
 
23.03.12
16:46
(21) У себя нашел файл  msjetoledb40.dll версия 4.0.9756. Значит, библиотечка стоит. но вот ошибка... позже домой приеду попробую ни XP эту обработку запустить.
23 Deniskind
 
23.03.12
16:59
На Win 7 с такой же версией библиотеки как и у вас ваш файл тоже открывается нормально.
24 Deniskind
 
23.03.12
17:21
Ага! Попалась, которая кусалась! :)
Эксперимент на Win XP без установленного BDE показал вашу же ошибку о неверном формате. После установки BDE все отработало корректно.
Для установки надо найти файл bdeinst.cab, извлечь из него bdeinst.dll и зарегистрировать эту dll в системе с помощью regsrv32.
Понимаю, что, видимо, вам без лишних телодвижений у пользователя не обойтись. Либо этот способ, либо ВК стало быть.
25 Dmitriy_S
 
23.03.12
23:02
Делюсь как это победил дома я. По совету (24) я искал BDE, но так просто его не нашел. нашел в делфи, установил. запустил обработку - выдал уже другую ошибку([Microsoft][Драйвер ODBC Paradox] Непредвиденная ошибка драйвера внешней базы данных (11265)).
Наткнулся в инете на описание этой ошибки - надо было запускать с под пользователем с административными правами, это несмотря на то, что я администратор на компе. напоминаю ОС - Win7. В общем, после этих плясок, вроде, перебор строк заработал.

зы. Огромное всем спасибо за участие!!!
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан