Имя: Пароль:
1C
1С v8
ADODB.Connection записать таблицу значений
0 MiniMuk
 
18.07.13
08:20
В 1с запросом получаю набор данных, хочу сохранить во внешнюю таблицу.
Делаю, сохраняю в таблицу.
Таблица = Запрос.Выполнить().Выгрузить();

//Подключаюсь  к базе

Конект  = Новый COMОбъект("ADODB.Connection");
Конект.ConnectionTimeOut=600;
Конект.Open(СКЛКоннект);

хочу сохранить таблицу, как можно сделать кроме

Какаятострока  ="insert into " + КакаятоБаза + ".dbo.КакаятоТаблица (Поле1,Поле2)
|values ('Значение1', 'Значение2')
|, ('Значение2', 'Значение4' )";    
   
try
 Конект.Execute("BEGIN TRANSACTION");
 Конект.Execute("set implicit_transactions off");
 Конект.Execute(Какаятострока) ;
 Конект.Execute("Commit");
except
 Конект.Execute("Rollback");
 Message(ОписаниеОшибки());
endtry;    
   
Кроме как формировать Какаятострока   в цикле есть еще способы?
СП по функциям ADODB.Connection есть читаемая?
1 shuhard
 
18.07.13
08:24
(0) Insert такой возможности не представляет, только Select
2 MiniMuk
 
18.07.13
08:31
(1) Запрос я формирую в терминах 1с. Тоесть у меня там полноценные ссылки, перечисления, значения. На выходе  плоская таблица для excel.

   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    Остатки.Склад,
   |    Остатки.Номенклатура,
   |    Остатки.КоличествоОстаток КАК КоличествоОстаток,
   |    Остатки.КатегорияТоваров
   |ПОМЕСТИТЬ ОстаткиСКатегориями
   |ИЗ
   |    Остатки КАК Остатки
   |ГДЕ
   |    Остатки.КоличествоОстаток >= 0
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |УНИЧТОЖИТЬ Остатки
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    Матрица.КатегорияСкладов КАК КатегорияСкладов,
   |    ЕСТЬNULL(ОстаткиСКатегориями.Склад, Матрица.СкладКатегорииСкладов) КАК Склад,
   |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ОстаткиСКатегориями.Номенклатура) КАК SKU_Факт,

Было бы проще конечно весь запрос поместить в insert
3 shuhard
 
18.07.13
08:33
(2) используй булк, то ни какой гарантии, что это будет быстрее нет
4 MiniMuk
 
18.07.13
08:36
(3) это что? пни в сторону? мне не обязательно быстрее, это будет регламетное задание раз в сутки. просто боюсь записей будет много строка запроса ну ооочень длинная получиться
5 shuhard
 
18.07.13
08:39
(4) откуда много строк, строка одна, выполняемая в цикле
6 tplink741nd
 
18.07.13
08:41
(5) а зачем в цикле делать?
7 MiniMuk
 
18.07.13
08:43
(5) ну к примеру я получил запросом 2222 строки. у меня в inser секция values  будет 2222 скобок  values ('Значение1', 'Значение2'), ('Значение2', 'Значение4' )('Значение1', 'Значение2'), ... 2222 раза
8 Серго62
 
18.07.13
08:44
(0) Не знаю поможет или нет, но есть объект ADO.Recordset с ним можно работать почти как с таблицей значений. Почитать можно здесь http://www.askit.ru/custom/progr_admin/m13/13_03_01_ado_recordset_opening.htm
9 tplink741nd
 
18.07.13
08:46
(7) можно это делать так
insert табл1 (поле1, поле2, поле3)
select поле1, поле2, поле3 from табл1

т.е. селектом ты получаешь 2222  строк а верхний инсерт их сразу пихает в нужную таблицу, как-то так
10 shuhard
 
18.07.13
08:46
(7) ещё раз
что мешает сделать 2222222 Insert по одной строке,
а не один на 222222 строк ?
11 tplink741nd
 
18.07.13
08:48
(10) для чего это делать?
12 tplink741nd
 
18.07.13
08:48
по одной строке?
13 tplink741nd
 
18.07.13
08:50
в (9) ошибся  - в селекте естественно указывается таблица из которой нужно читать данные, а в инсерте таблица - в которую записывать
14 MiniMuk
 
18.07.13
09:01
(9) inser в АДО а селект в 1с? ничего не смущает
15 MiniMuk
 
18.07.13
09:04
(10) Тоже вариант, просто нухочется не влоб задачу, заодно ченибудь новое узнать. Пойду читать можно ли (8) собственно как данные из  ADO.Recordset  читать понятно, а можно ли туда запихать пойду читну
16 Серго62
 
18.07.13
09:08
(15) Можно и читать и добавлять
17 ДенисЧ
 
18.07.13
09:16
(10) Мешает ограничение на размер запроса в адо...
(0) переходи на 77, там эо реализовано
18 MiniMuk
 
18.07.13
09:23
(17) Клево, почти закончили переход на 8.2 а тут, вау, на 7.7 такая плюшка есть, айда обратно?! 7.7 ну подтупливала сильно
19 MiniMuk
 
18.07.13
09:28
(17) я ПОДОЗРЕВАЛ что есть ограничение
20 shuhard
 
18.07.13
09:33
(17)[Мешает ограничение на размер запроса в адо... ]
открой для себя метод AddNew
21 Jaap Vduul
 
18.07.13
09:44
2000 строк - это не много, можно и циклом по одной строке. Когда строк действительно много, то данные из 1цэ сохраняем в текстовый файл, а через ADO вызываем bulk insert - будет очень быстро.
22 ДенисЧ
 
18.07.13
09:44
(20) Имеется в виду - сформировать один запрос на всю базу. Вот тут-то и...
23 Jaap Vduul
 
18.07.13
09:47
(20) Видимо, имелось в виду запихать все 2000 инсертов в один батч.
24 shuhard
 
18.07.13
09:48
(23) булк предложен в (3) =)
25 MiniMuk
 
18.07.13
09:55
(24) можно кратенький пример?
26 MiniMuk
 
18.07.13
09:56
(21) Много это сколько? сейчас пытаюсь представить масштабы происходящего
27 Jaap Vduul
 
18.07.13
10:13
28 MiniMuk
 
18.07.13
10:42
(27) Оромное, просто шикарно