Имя: Пароль:
1C
1C 7.7
v7: Соединиться с MS Access из 1С и забрать данные
0 YF
 
17.07.11
19:20
Хочу из 1С 7.7 соединиться с базой данных MS Access и забрать оттуда данные.

Данные забираю перекрестным запросом написанным в той же базе MS Access.

Попытка № 1
   Соединение:
адоДБ_                            = СоздатьОбъект("ADODB.Connection");
Попытка
   строкаПодключения_ = "
   |Provider=Microsoft.Jet.OLEDB.4.0;
   |Data Source = " + путь_ +";
   |Persist Security Info=False";
   // А теперь выполним подключение
   адоДБ_.Open(строкаПодключения_);
Исключение
   // Делать больше нечего
   Сигнал();
   Сообщить(ОписаниеОшибки(), "!");
   Возврат 0;
КонецПопытки;
командаАДОДБ_                    = СоздатьОбъект("ADODB.Command");
командаАДОДБ_.ActiveConnection    = адоДБ_;

Все ОК, соединились

Запрос:
запрос_                        = СоздатьОбъект("ADODB.Recordset");
командаАДОДБ_.CommandText    = "SELECT * FROM MyTable;";
// попробуем выполнить запрос
Попытка
   запрос_                = командаАДОДБ_.Execute;
Исключение
   Сигнал();
   Сообщить(ОписаниеОшибки(), "!");
   Возврат 0;
КонецПопытки;
// Если рекордсет пуст, то вернемся
Если (запрос_.EOF() = -1) ИЛИ (запрос_.BOF() = -1) Тогда
   запрос_.Close();
   запрос_ = "";    
   Сообщить("Пустой запрос");
Иначе
   запрос_.MoveFirst();
КонецЕсли;//(запрос_.EOF() = 1) ИЛИ (запрос_.BOF() = 1)    

// Побежали по рекордсету
Пока запрос_.EOF() = 0 Цикл
   // ...
КонецЦикла;//запрос_.EOF() = 0    

Если MyTable перекрестный запрос, то всегда запрос_.EOF() = 1 и запрос_.BOF() = 1
если же MyTable запрос на выборку или таблица, то все Ок, данные выбираются ...

Как забрать данные из перекрестного запроса?
1 Лефмихалыч
 
17.07.11
19:24
щито?..
2 YF
 
17.07.11
19:26
(1) Што?
3 YF
 
18.07.11
12:54
Продолжаем разговор ...
4 VladZ
 
18.07.11
12:58
Пример перекрестного запроса приведи.
5 skunk
 
18.07.11
12:59
ничего не понял ... перекрестный возращает один член такой-же рекордсет
6 YF
 
18.07.11
13:01
(5) Я тоже так думал, но если его выполнять в самом Акцессе, то все ок, а через АДО из 1С - вот как в (0) ...
7 skunk
 
18.07.11
13:08
(6)у тебя там непонятно ... у тебя запрос возращает все таки -1, 0 или 1
8 btrvodka
 
18.07.11
13:19
А нельзя результат запроса сохранять в текстовик и потом читать его. Если скорость не критична- то это самое то. Можно даже использовать хранимые процедуры.
9 YF
 
18.07.11
15:04
(7) Отладчик говорит что:
запрос_.EOF() = -1
запрос_.BOF() = -1

сорри. опечаточка была

(8) Нельзя
10 ado
 
18.07.11
15:13
(5) Нет.
11 ado
 
18.07.11
15:20
Пиши обычный select и "перекрещивай" уже в 1С.
12 YF
 
18.07.11
15:28
(11) Блин геморно это, а варианта получить через адо совсем нету? Микрософтовский хелп пишет, что Jet.SQL поддерживает Transform ... Блин, врут опять :-(
13 ado
 
18.07.11
15:32
(12) Оно, может и поддерживает, но вот что при этом должна поддерживать принимающая сторона?
Ну сам подумай, как можно сводную таблицу в рекордсет запихать? Там же заголовки стобцов не имена полей, а значения.
14 ado
 
18.07.11
15:39
Хотя ... вот тут, вроде, для входа тоже рекордсет используют: http://hiprog.com/index.php?option=com_content&task=view&id=430&Itemid=35
Но пишут, что сугубо через DAO, через ADO не работает.
15 YF
 
18.07.11
15:51
DAO - это же акцесс 97, все последующие используют адо?