Имя: Пароль:
1C
 
чтение файла DB
,
0 rt2000
 
23.10.14
21:51
Подскажите пожалуйста, никак не могу найти как должно происходить чтение файла "db" (не dbf). Интернет облазил, ничего не нашел, нашел только две строчки на форуме, но и они не работают.
Можете привести пример, как 1с читает db файл
1 spectre1978
 
23.10.14
21:58
Хм, для начала недурно бы понять что за файл. Paradox?
2 roman844
 
23.10.14
21:59
пробуй ЭКСЕЛЬ
3 roman844
 
23.10.14
22:00
это Paradox. Я не давно данные переносил из Инфо-бухгалтера, так экселем их открывал.
4 spectre1978
 
23.10.14
22:00
Если это Paradox DB, то можно попробовать связку ADO-провайдер ODBC-драйвер Paradox для ODBC
5 spectre1978
 
23.10.14
22:02
ну или вариант (3)
6 spectre1978
 
23.10.14
22:03
(3) по расширению не всегда можно ориентироваться. Мы не знаем точно, откуда переносится инфа, и под расширением DB вполне может оказаться что-то самопальное...
7 roman844
 
23.10.14
22:04
(6) согласен
8 rt2000
 
23.10.14
22:07
в файле db хранится таблица. Excel, -думаю это не то
9 spectre1978
 
23.10.14
22:09
(8) почему? Если файл парадоксовский, то Excel может его открыть
10 rt2000
 
23.10.14
22:12
(9) пробовал через Excel, вообще никакой реакции.
Мне нужно не открыть файл, а прочитать его, нужен образец кода
11 spectre1978
 
23.10.14
22:14
(10) сигнатуру файла можешь посмотреть? Какие байты вначале?
12 rt2000
 
23.10.14
22:18
вот ссылка
http://dropmefiles.com/jDWeQ
13 spectre1978
 
23.10.14
22:22
По-моему, это парадоксовский файлик. Сейчас посмотрим...
14 roman844
 
23.10.14
22:26
у меня запрашивает пароль
15 rt2000
 
23.10.14
22:31
нету никакого пароля, даже не знаю от куда он взялся.
Если это парадоксовский файл, то как его правильно прочитать?
16 spectre1978
 
23.10.14
22:36
хм... драйвер видит таблю User, но при попытке открытия непредвиденная ошибка базы данных 11010. Возможно, нет какого-нть индексного файла или чего-то наподобие
17 spectre1978
 
23.10.14
22:37
18 roman844
 
23.10.14
22:40
MS VISUAL FOXPRO, только посмотреть
19 spectre1978
 
23.10.14
22:41
Попытался сформировать строку из (17), опять-таки - таблицу видит, но данные не извлекает. Чего-то не хватает, скорее всего индексов.
20 spectre1978
 
23.10.14
22:46
есть еще какие-то файлы User.* ?
21 spectre1978
 
23.10.14
22:48
(0) в (17) описано, как формировать Paradox- строку соединения для провайдера Jet. Если есть желание - пробуйте самостоятельно, у вас база целиком есть.
22 rt2000
 
23.10.14
22:49
(20) файлов больше нету.
А если бы были? То мне придется их одновременно читать или как?
23 spectre1978
 
23.10.14
23:04
(20) вообще у парадокса обычно для одной таблицы есть файл данных и несколько вспомогательных с тем же именем но другими расширениями - PX, MB... Когда обращаешься к базе, как правило, нужно указывать папку со всеми этими файлами, после чего становится возможным обращаться к отдельным таблицам. Это я собираю в кучку все что я помню по вопросу. Последний раз с парадоксом воевал лет 12 назад.
24 spectre1978
 
23.10.14
23:09
когда я обратился через драйвер к папке, где лежит твой файл, мне удалось увидеть таблицу USER, но не удалось увидеть поля в ней, а при попытке исполнить SELECT * from USER я получил ошибку синтаксиса в предложении FROM. Это скорее всего может означать либо разрушенный/непарадоксовский файл, либо отсутствие требуемых дополнительных файлов (индексных и т.п.) в каталоге. Нужно понять в чем проблема.
25 Woldemar22LR
 
23.10.14
23:45
Знакомый кодил на Btrieve обзывал расширением *.db
Я тоже :)
Файл слегка смахивает на Btrieve файл.
Запись на поля делит прикладная программа.
26 Woldemar22LR
 
23.10.14
23:58
чем прочитать -ищи ddf btrieve editor belov
27 Woldemar22LR
 
24.10.14
07:24
(27) утром проснулся вспомнил - как вариант это еще может быть файл клариона.
найди pervasive попробуй им открыть файл.
28 rt2000
 
24.10.14
08:25
(27) pervasive - это программа для открытия таблиц?
29 ASV
 
24.10.14
08:44
в обычном редакторе открой файл. дальше заменой убери лишнее. там все то 100 записей
30 Woldemar22LR
 
24.10.14
08:45
(28) Pervasive.SQL купил Btrieve у новелла и на его основе сделал sql - там есть инструмент для просмотра файлов btrieve, файлы клариона это по сути тоже btrieve.

(29) + много :)))
31 ASV
 
24.10.14
08:52
получается там две таблицы
1.ID    Code    Name    Text    
2. ProfileID    Password    Card    Finger
32 spectre1978
 
24.10.14
09:04
мне все-таки кажется что парадоксовский файл. Обратите внимание на строку ancyrr в заголовке - таким образом у парадокса кодируется поддержка кириллицы (как вариант там может быть ascii и другое подобное). Вопрос только, почему его джет не кушает.
33 ASV
 
24.10.14
09:13
файл возможно не весь. последняя строчка не полная
34 spectre1978
 
24.10.14
09:14
Попытался открыть через BDE - получил более информативное сообщение: BLOB file not found or corrupt. Открыл в рид-онли.
Получил список полей. При попытке открыть таблицу BDE запросил файлики:
USER.PX
USER.MB
Так что мой первоначальный диагноз был верным.
35 gae
 
24.10.14
09:15
Мы брали vfpoledb.dll
Потом через ADO читали, писали.

Вот куски кода:

Функция ПолучитьСтрокуПодключения(Путь,Тип,Provider="")
    
    Если Provider="" Тогда
        Provider="Microsoft.Jet.OLEDB.4.0";    
    КонецЕсли;
    
    Возврат "Provider = "+Provider+";
    |Data Source="+Путь+";
    |Extended Properties="+Тип+";
    |Mode=Read|Write|Share Deny None;
    |Persist Security Info=True";
    
КонецФункции

-----------------
...
    ИначеЕсли ВыборкаИзменений.ФорматТаблицы = "DB" Тогда
        ТипБазы = "Paradox 5.X";
    Иначе
        ТекстОшибки = ВывестиСообщениеОбОшибке(ЗаголовокСообщенияОбОшибке,"Неизвестный формат таблицы: "+ВыборкаИзменений.ФорматТаблицы,Ложь);
        Возврат Ложь;
    КонецЕсли;
    
    СтрокаПодключения = ПолучитьСтрокуПодключения(Путь,ТипБазы,Provider);
    
    Соединение     = Новый COMОбъект("ADODB.Connection");
    
    Catalog     = Новый COMОбъект("ADOX.Catalog");
    
    Попытка
        Catalog.ActiveConnection = СокрЛП(СтрокаПодключения);
        Соединение.Open(СокрЛП(СтрокаПодключения));  
    Исключение
        ТекстОшибки = ВывестиСообщениеОбОшибке(ЗаголовокСообщенияОбОшибке);
        Возврат Ложь;
    КонецПопытки;
    
    Command                     = Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection     = Соединение;
...
---------------
...

    //SELECT
        Успешно = СформироватьЗапросSELECT(Command, ИмяТаблицы, СтруктураКлючей, СтруктураИзменений, ТекстОшибки);
        
        Если не Успешно Тогда
            Возврат Ложь;
        КонецЕсли;
        
            
            RecordSet = Новый COMОбъект("ADODB.RecordSet");
            RecordSet.LockType = 2;    //2
            RecordSet.CursorType = 1;  //1
            
            Попытка
                RecordSet.Open(Command);
            Исключение
                ТекстОшибки = ВывестиСообщениеОбОшибке(ЗаголовокСообщенияОбОшибке);
                Соединение.Close();
                Возврат Ложь;
            КонецПопытки;
            
            // Перебор данных
            Если не ВыборкаИзменений.НеУникальныеЗаписи Тогда
                
                Если не RecordSet.EOF() = 1 Тогда
                    ЕстьЗапись = Истина;
                Иначе
                    ЕстьЗапись = Ложь;
                КонецЕсли;
                
                Если ЕстьЗапись Тогда
...
36 rt2000
 
24.10.14
09:16
если пробовать строчки:
ExcelПриложение = Новый COMОбъект("Excel.Application");
Книга = ExcelПриложение.WorkBooks.Open(Путь);

то сначала появится таблица, с запросом пароля, а потом будет ошибка
37 spectre1978
 
24.10.14
09:16
файл все-таки парадоксовский, вот список полей из билдера:

        TAutoIncField *Table1ID;
        TIntegerField *Table1Code;
        TStringField *Table1Name;
        TStringField *Table1Text;
        TIntegerField *Table1ProfileID;
        TStringField *Table1Password;
        TStringField *Table1Card;
        TBlobField *Table1Finger;

но чтобы зачитать данные, нужны все файлы. одного DB недостаточно
38 spectre1978
 
24.10.14
09:18
либо, если по какой-то причине этого нет - может быть, возможно восстановить индексы в Database Desktop. У меня он, к сожалению, не установлен потому что был не нужен. Если (0) актуально, то могу позаморачиваться
39 spectre1978
 
24.10.14
09:19
последнее поле - Finger - это блоб. Блобы у парадокса хранятся в отдельных (!) файлах
40 rt2000
 
24.10.14
09:25
(39) finger -это поле не нужно.
(35) попробовал так:
RecordSet = Новый COMОбъект("ADODB.RecordSet");
    RecordSet.LockType = 2;    //2  
    RecordSet.CursorType = 1;  //1  
    попытка
        RecordSet.Open(Путь);
        Сообщить("да");
    Исключение
        ТекстОшибки = ИнформацияОбОшибке();
        Сообщить("нет");
    КонецПопытки;

Выводит "нет" информации об ошибке нет
41 ASV
 
24.10.14
09:26
Database Desktop открыл в read-only
42 spectre1978
 
24.10.14
09:29
(40) если других файлов действительно нет (в чем я не уверен), то вряд ли вы сможете открыть чем-либо кроме Database Desktop. Потому что база по сути повреждена - нет части данных.
43 spectre1978
 
24.10.14
09:30
(41) там нет функционала, который позволил бы восстановить индексы? Я уж и позабыл как с ним работать...
44 rt2000
 
24.10.14
09:31
(42) скажи, я немного не понимаю. У меня база открывается через Database Tour Pro. Открывается таблица и могу посмотреть таблицу. А как в 1с открыть, при помощи Database Desktop?
45 Woldemar22LR
 
24.10.14
09:34
(44) ты чего то не договариваешь? :)))
46 spectre1978
 
24.10.14
09:36
(44) Database Desktop - это не через 1С. Это просто самостоятельная программа. Дело в том что парадоксовская база содержит не один файл на таблицу, а несколько, а прислан только один. Соответственно, база с точки зрения парадокса - повреждена и просто так открыть ее не получится. И мы тут пытаемся открыть хоть как-то. Понятно?
47 rt2000
 
24.10.14
09:36
Насчет файлов вы были правы, только что спросил. Их 5 шт:
DB, MB, XGO, PX, YGO
и как мне сразу с пятьми файлами работать
48 rt2000
 
24.10.14
09:38
(46) таблицу открыть я могу через Database Tour Pro, мне видны значения полей, а в 1с нет
49 Woldemar22LR
 
24.10.14
09:38
(47) ну ты и партизан.... Так как тебе сказали в (4)
На допросе давно был? :))))
50 rt2000
 
24.10.14
09:45
(49) извиняюсь.
Вчера дали один файл, сегодня по другому спросил, дали 5 файлов
51 spectre1978
 
24.10.14
09:51
(50) ну вот теперь пробуй через 1С со строкой соединения, как написано в (17). В Data source указывай папку с файлами, в Extended Properties Paradox 7.x. Возможно, получится.
52 spectre1978
 
24.10.14
09:51
+ (50) или можно попробовать как в (4), но вариант из (17) мне нравится больше - это гораздо проще
53 rt2000
 
24.10.14
09:57
в (17) написано:
Provider=Microsoft.Jet.OLEDB.4.0;
    Data Source=C:\Program Files\BD\Base;
    Mode =Read|Write|Share Deny None;
    Extended Properties=Paradox 7.x;
    Persist Security Info = True;

Можете подсказать, что значит этот код?
54 gae
 
24.10.14
10:00
(53) это строка подключения. путь где таблицы лежат, режим, прочие настройки
55 rt2000
 
24.10.14
10:07
сделал так
Акцесс = СоздатьОбъект("ADODB.CONNECTION");
    СтрокаПодключения= Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Путь;Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True;
    Акцесс.Open(Путь);

Ошибка в служебном сообщении:
Неопознанный оператор
    СтрокаПодключения= Provider=Microsoft.Jet.OLEDB<<?>>.4.0;Data Source=Путь;Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True; (Проверка: Сервер)
56 КонецЕсли
 
24.10.14
10:09
Чего-то наподобие?

ID   47
Code 47
Name Гераськина
Text Гераськина
ProfileID 6
Password 65
Card $4444$

Файл можно как обычный TXT сделать (убрать заголовок). Поля имеют фикс. длину. Легко распарсить. Только потом часть полей из текстового вида преобразовать обратно в коды с помощью КодСимвола а потом в десятичный вид.

З.ы. надо только узнать про байт 0x80 несёт в себе данные или просто разграничитель полей.
57 gae
 
24.10.14
10:09
(55)а ковычки где?
58 rt2000
 
24.10.14
10:14
(57) не понимаю какие кавычки? Куда их ставить, поставлю в одном месте, в другом будет ошибка...
59 silent person
 
24.10.14
10:15
СтрокаПодключения="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Путь;Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True;";
60 silent person
 
24.10.14
10:17
всмысле СтрокаПодключения="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Путь+";Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True;";
61 rt2000
 
24.10.14
10:30
Можно еще немного объяснить.
Написал код
Акцесс = Новый COMОбъект("ADODB.CONNECTION");
Путь = "D:\atol";
СтрокаПодключения="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Путь+";Mode =Read|Write|Share Deny None;Extended Properties=Paradox 7.x;Persist Security Info = True;";
Акцесс.ConnectionString = СтрокаПодключения;
Книга = Акцесс.WorkBooks.Open(Путь);


Появляется ошибка: Произошла исключительная ситуация (ADODB.Connection); Операция не допускается, если объект закрыт.


Ошибка при получении значения атрибута контекста (WorkBooks)
Книга = Акцесс.WorkBooks.Open(Путь);
62 silent person
 
24.10.14
10:32
WorkBooks ? O_o   ты же не через Excel файлы открываешь.
63 rt2000
 
24.10.14
10:34
(62) через Excel тоже пробовал
64 Looser-1c
 
24.10.14
10:35
(63) А теперь попробуй об стенку с разбегу.
65 silent person
 
24.10.14
10:38
(61) а пароль на базу не надо никакой ?
66 rt2000
 
24.10.14
11:16
(65) а где его надо написать? Есть пароли для пользователей, т.е. надо указать пользователя и его пароль?
67 silent person
 
24.10.14
11:48
у меня строка подключения была такая
СтрокаСоединения    = "Provider=Microsoft.Jet.OLEDB.4.0;
|Jet OLEDB:Database Password=""jIGGAe"";
|Data Source="+ТемпКаталог+";
|Extended Properties=Paradox 5.x;
|";

но мне сразу сказали что jIGGAe - это технический пароль на базы paradox
68 gae
 
24.10.14
12:10
(58) ставь не в одном месте, а в двух :)
69 spectre1978
 
24.10.14
14:41
(55),(61) да, с таким пониманием технологий тяжело, наверно, работать...
70 Woldemar22LR
 
24.10.14
17:28
(69) не знаю как ты я уже тупо пью, я теперь понимаю почему темы пятницы перестали создавать. Потому что ближе к пятнице во всех темах начинается сплошная пятница.
71 Torquader
 
27.10.14
00:49
Я, помнится, писал на сях читалку Paradox, чтобы восстановить файл с данными, только потом умная читалка показала, что в середине файла вместо данных одни 0xFF - после этого очень не люблю этот Paradox.
72 Стальная Крыса
 
27.10.14
06:47
Читал тему - смешно :)
Автор, по-ходу, и в 1С немного понимает, а ещё взялся из 1С сторонними продуктами пользоваться.
куды мир катится...
73 spectre1978
 
27.10.14
11:42
(71) Много лет назад я пользовался парадоксовскими базами, используя BDE (Borland Database Engine). Для совсем небольших объемов сойдет, когда речь начинает идти о десятках мегабайт - начинает барахлить даже локально: появляются висячие внешние ключи, дубликаты PK и прочая гадость. А уж по сети и говорить нечего. В результате отказался от него. А так, в принципе, сделать импорт данных никаких проблем - дельфю в руки и вперед.
74 spectre1978
 
27.10.14
11:44
+ (71) починялки файлов какие-то были, точно помню
75 Torquader
 
27.10.14
22:17
(74) Если середину файла затёрло из-за ошибки на диске, то нет смысла такой файл восстанавливать.
76 spectre1978
 
28.10.14
10:57
(75) почему? У меня был случай когда файл проводок в семерке покрячило в середине из-за плохого сектора. Ничего, взял бэкапный и из него пару килобайт вклеил по смещению, потом ТИИ - и все нормально...