Имя: Пароль:
1C
1С v8
Как заполнить таблицу SQL из 1С???
0 _Dynamic_
 
25.07.12
12:49
Есть таблица значений. Как мне ее закинуть в SQL????
1 Ненавижу 1С
 
гуру
25.07.12
12:49
лопатой
2 Spieluhr
 
25.07.12
12:51
адо
3 х86
 
25.07.12
12:51
Врем таблицы, не?
(0)а с какой целью интересуетесь?
4 Fragster
 
гуру
25.07.12
12:52
insert into table values...
5 Sorm
 
25.07.12
12:52
(0) Соединяешься с SQL-сервером, создаешь там таблицу, потом делаешь insert, профит.
6 _Dynamic_
 
25.07.12
12:53
Задача стоит такая, данные из 1с-ки закинуть в sql, а из sql данные на сайт будут тянутся
7 sash-ml
 
25.07.12
12:54
выгружаешь в CSV делаешь Bulk Insert
8 Fragster
 
гуру
25.07.12
12:55
(6) я не против, делай
9 Cандер
 
25.07.12
13:09
Как-то так:

database="DB"; //имя базы
uid="123"; //логин
pwd="123"; //пароль
   
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = "Provider=MSDAORA;Password="+pwd+";User ID="+uid+";Data Source="+database+";Persist Security Info=True;CharSet=AMERICAN_AMERICA.CL8MSWIN1251;"; //строка подключения. Сейчас для ORACLE (необходимо поменять на нужное)


   Попытка              
       Соединение.Open();
       Возврат Соединение;
   Исключение
       Предупреждение("Не удалось соединиться с базой данных!");
       Сообщить(ОписаниеОшибки());
       Возврат ложь;
   КонецПопытки;

Для каждого Строка из ТЗ Цикл
   ТекстЗапросаADO = "INSERT INTO TableName(Rekv1, Rekv2) VALUES ("
   + Строка.Значение1 + ", "
   + Строка.Значение2 + ", "
   + ")";
КонецЦикла;

Соединение.Execute(ТекстЗапросаADO,,128);
Соединение.Close();
10 _Dynamic_
 
25.07.12
13:19
Сандер, пишет Ошибка при вызове метода контекста (Execute)   :(
11 Fragster
 
гуру
25.07.12
13:19
(10) не повезло
12 Cандер
 
25.07.12
13:53
(10)     + Строка.Значение2 + ", " \\тут лишняя зп.

Проверь какой запрос получается в итоге.
Должен быть INSERT INTO TableName(Rekv1, Rekv2) VALUES (1,2)
13 Maxus43
 
25.07.12
13:55
(12) почто MSDAORA юзаеш? этож оракл
14 Cандер
 
25.07.12
13:56
(13) в листинге я указал, что надо поменять немного строку подключения под свою СУБД
15 Cандер
 
25.07.12
13:57
(13) + Я действительно юзаю Oracle
16 Maxus43
 
25.07.12
13:58
(14) упс, комент не прочитал)
17 _Dynamic_
 
25.07.12
14:06
У меня на выходе получается что то типа
INSERT INTO TableName(Rekv1, Rekv2) VALUES (1,2) INSERT INTO TableName(Rekv1, Rekv2) VALUES (3,4) ......... INSERT INTO TableName(Rekv1, Rekv2) VALUES (1,2)
18 Cандер
 
25.07.12
14:24
(17) стоит признать, что запрос в цикле - не айс. Перенеси Execute в цикл. Ты же их должен выполнять каждый раз ) Моя ошибка цикл для тебя добавил )
19 _Dynamic_
 
25.07.12
14:49
Сандер, все равно эту же ошибку вываливает даже если в цикле :(
20 Cандер
 
25.07.12
14:54
(19) Код в студию
21 Cандер
 
25.07.12
14:58
(19) может у тебя строки и даты там? Строки надо обрамлять апосторфами "'", даты преобразовывать средствами SQL
22 _Dynamic_
 
25.07.12
14:59
ТекстЗапросаADO = "";
   Для каждого СтрРезультатВыборки из РезультатВыборки Цикл
       ТекстЗапросаADO = ТекстЗапросаADO + "INSERT INTO ostatki(id, name, city, ed_izm, obem, massa, price, number) VALUES ("
       + СокрЛП(СтрРезультатВыборки.КаталожныйНомер)+", "
       + СокрЛП(СтрРезультатВыборки.НаименованиеПолное)+", "
       + СокрЛП(СтрРезультатВыборки.Город)+", "
       + Строка(СтрРезультатВыборки.ОсновнаяЕдиницаИзмерения)+", "
       + Строка(СтрРезультатВыборки.Объем)+", "
       + Строка(СтрРезультатВыборки.Масса)+", "
       + Строка(СтрРезультатВыборки.Цена)
       + Строка(СтрРезультатВыборки.Количество) + ")";
       Соединение.Execute(ТекстЗапросаADO,,128);
   КонецЦикла;
       
   Соединение.Close();
23 Serginio1
 
25.07.12
15:00
ВыполнитьSQL_ИзТЗ


лМета = СоздатьОбъект("MetaDataWork");
СписокМета = СоздатьОбъект("ТаблицаЗначений");
СписокМета.НоваяКолонка("ID","Число");
Для ъ = 1 По мСпр.Реквизит() Цикл
   Если мСпр.Реквизит(ъ).Периодический = 1 Тогда
       СписокМета.НоваяСтрока();
       СписокМета.ID = Число(лМета.ИДОбъекта(мСпр.Реквизит(ъ)));    
   КонецЕсли;
КонецЦикла;

лЗапрос = СоздатьОбъект("ODBCRecordSet");
лЗапрос.Выполнить("
|IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
|ID=OBJECT_ID('tempdb..#TempTab') AND sysstat & 0xf = 3 )
|DROP TABLE #TempTab);

лЗапрос.Выполнить("
|CREATE TABLE #TempTab (ID INT, PRIMARY KEY CLUSTERED (ID) )");
лЗапрос.Подготовить("Insert into #TempTab Values (?)");
лЗапрос.ВыполнитьSQL_ИзТЗ(СписокМета);
24 _Dynamic_
 
25.07.12
15:02
всмысле вот, старый код скопал ))

Для каждого СтрРезультатВыборки из РезультатВыборки Цикл
       ТекстЗапросаADO = "INSERT INTO ostatki(id, name, city, ed_izm, obem, massa, price, number) VALUES ("
       + СокрЛП(СтрРезультатВыборки.КаталожныйНомер)+", "
       + СокрЛП(СтрРезультатВыборки.НаименованиеПолное)+", "
       + СокрЛП(СтрРезультатВыборки.Город)+", "
       + Строка(СтрРезультатВыборки.ОсновнаяЕдиницаИзмерения)+", "
       + Строка(СтрРезультатВыборки.Объем)+", "
       + Строка(СтрРезультатВыборки.Масса)+", "
       + Строка(СтрРезультатВыборки.Цена)
       + Строка(СтрРезультатВыборки.Количество) + ")";
       Соединение.Execute(ТекстЗапросаADO,,128);
   КонецЦикла;
       
   Соединение.Close();
25 Cандер
 
25.07.12
15:02
Кавычки для всего где не числа добавь
26 Cандер
 
25.07.12
15:03
"'" + СокрЛП(СтрРезультатВыборки.КаталожныйНомер)+"', "
27 _Dynamic_
 
25.07.12
15:13
Вот что на выходе у меня получается
INSERT INTO ostatki(id, name, city, ed_izm, obem, massa, price, number) VALUES ("", "Держатель номерных знаков", "", "шт", "0", "0", "12 475", "17")

правильно все? Все значения у меня типа строка
28 ДенисЧ
 
25.07.12
15:19
(27) замени " на '
29 х86
 
25.07.12
15:30
(6)создай РС(можно справочник) и стандарно пиши в него данные
30 _Dynamic_
 
25.07.12
15:45
Всем большое спасибо за помощь! Заработало! :)
31 dangerouscoder
 
25.07.12
15:56
(30) можно еще юзать параметризированный запрос
http://www.sql.ru/forum/actualthread.aspx?tid=489735
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс