Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Передача данных из MSSQL в 1С

Передача данных из MSSQL в 1С
Я
   sx55
 
03.08.21 - 15:17
Здравствуйте гуру, у меня вопрос следующего характера...
Есть сторонняя база MSSQL, в которой имеется куча таблиц из которых нужно получить данные и передать в 1С.
Сам я давно не занимался MSSQL (более пятнадцати лет) и уже ничего не помню, а времени тратить на воспоминания нет.
Если кто сможет предоставить работающий пример передачи данных из определённой таблицы, в определённой базе MSSQL, то буду очень благодарен.

Вот мой набросок кода из 1С
    СтрокаСоединения = ("Driver=SQL Server;Server=") + Объект.SQLServer + (";UID=") + Объект.Login + (";PWD=") + Объект.Password + (";DataBase") + Объект.ИмяБД;
    СоединениеSQL = Новый ComObject("ADODB.Connection");
    СоединениеSQL.ConnectionString=СтрокаСоединения;
    Попытка
        Сообщить("Open");
        СоединениеSQL.Open();
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
    ЗаписиSQL.ActiveConnection = СоединениеSQL;
    
    СоединениеSQL.Close();


Теперь, по логике, нужно получить количество колонок в указанной таблице и считать их содержимое. Но я не помню язык запросов и как передать данные в таблицу 1С. :(
   ДенисЧ
 
1 - 03.08.21 - 15:23
Надо вспомнить. Без вспоминания SQL ты ничего не сделаешь.
Ну, или ВИДы настраивать...

А так...
rs = СоединениеSQL.Execute("select * from TableFromBigHeapOfTables");
Для каждого fld ИЗ rs.Fields Цикл
  сообщить("" + rs.Name)$
КонецЦикла

так ты получишь имена колонок
   Aleksey
 
2 - 03.08.21 - 15:24
   sx55
 
3 - 03.08.21 - 15:26
(1) - Подожди, я не совсем понял логику "TableFromBigHeapOfTables", это название таблицы?
   sx55
 
4 - 03.08.21 - 15:27
(2) - Спасибо за ссылки, видимо придётся вновь пройти этот путь ради простенькой задачки. :(
   ДенисЧ
 
5 - 03.08.21 - 15:27
(3) Так ты не только SQL, но и английский забыл? Я старался, называл... ((
   sx55
 
6 - 03.08.21 - 15:30
(5) - Я после работы занимаюсь, голова кругом. )))
   sx55
 
7 - 03.08.21 - 15:39
Так, я похоже сложно объяснил.
Есть база, "DataBase", к которой я подключился.
В ней, есть куча таблиц, имя одной из которых "Tab1", в которой есть колонки "Col1", "Col2" и т.д.
Нужно получить имена колонок и содержимое таблицы.

(5) - Твой пример не сработал, ругается на "Недопустимое имя объекта".
   ДенисЧ
 
8 - 03.08.21 - 15:41
rs = СоединениеSQL.Execute("select col1, col2 from Tab1");
Пока НЕ rs.EOF Цикл
  Сообщить("Col1 " + rs.Fields("Col1").value + "   Col2 "+ rs.Fields("Col2").value);
  rs.MoveNext();
КонецЦикла
   sx55
 
9 - 03.08.21 - 15:50
(8) - Погоди, может я не правильно задаю имя таблицы?

Вот код:
    rs = СоединениеSQL.Execute("select * from dbo.UserLogin");
    Пока НЕ rs.EOF Цикл
          Сообщить("Col1 " + rs.Fields("UserName").value);
          rs.MoveNext();
    КонецЦикла;
    

Результат:
river][SQL Server]Недопустимое имя объекта "dbo.UserLogin".
{ВнешняяОбработка.ИмпортДанных.Форма.Форма.Форма(27)}:    rs = СоединениеSQL.Execute("select * from dbo.UserLogin");

по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя объекта "dbo.UserLogin"
   ДенисЧ
 
10 - 03.08.21 - 15:53
Нет такой таблицы... Попробуй без dbo. И проверь имя БД, к которой обращаешься.
Можешь попробовать bdname.dboUserLogin
   Ёпрст
 
11 - 03.08.21 - 15:54
(9) открой ужо ssms и на нужной табличке пкм - выбрать первые...создаст тебе правильный селект
   sx55
 
12 - 03.08.21 - 15:55
(10) - Увы, уже.

Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя объекта "UserLogin".
{ВнешняяОбработка.ИмпортДанных.Форма.Форма.Форма(27)}:    rs = СоединениеSQL.Execute("select * from UserLogin");

по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [Microsoft][ODBC SQL Server Driver][SQL Server]Недопустимое имя объекта "UserLogin".
   sx55
 
13 - 03.08.21 - 15:56
(11) - Мне нужны все данные, а не их часть.
   ДенисЧ
 
14 - 03.08.21 - 15:58
(12) Ну нету у тебя такой таблицы в твоей базе, что поделаешь...
   sx55
 
15 - 03.08.21 - 16:01
(11) - Спасибо тебе душевное человек, часть проблемы помог решить. Я уже и забыл про это. )))
(12) - Ошибка была тут...   rs = СоединениеSQL.Execute("select * from [Database].[dbo].[UserLogin]");
   sx55
 
16 - 03.08.21 - 16:03
Всё, всем спасибо, пойду кино смотреть и спать. Завтра доделаю обработку.

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.