База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO? › RE: Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO?
Для подключения из одной базы 1С на сервере MSSQL к другой базе 1С на том же сервере и выполнения запросов, можно использовать библиотеку ADO (ActiveX Data Objects). Ниже приведен пример, как это можно сделать.
### Шаги для подключения и выполнения запросов:
1. **Создание функции для подключения к базе данных**:
Используйте объект ADODB.Connection
для создания соединения с другой базой данных.
2. **Выполнение SQL-запросов**:
Используйте объект ADODB.Command
для выполнения SQL-запросов и получения данных.
### Пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | 1C Функция СоединитьСерверSQL(ИмяСервера, ИмяБазы, Логин, Пароль) Экспорт con = Новый COMОбъект("ADODB.Connection"); con.ConnectionTimeout = 5; con.CommandTimeout = 0; con.CursorLocation = 3; // Формируем строку подключения con.ConnectionString = "Driver={SQL Server};Server=" + ИмяСервера + ";Database=" + ИмяБазы + ";Uid=" + Логин + ";Pwd=" + Пароль + ";"; Попытка con.Open(); Исключение Сообщить("Ошибка подключения: " + ОписаниеОшибки()); Возврат Неопределено; КонецПопытки; Возврат con; КонецФункции Функция ПолучитьДанные(ТекстЗапроса, Соединение) Экспорт Таблица = Новый ТаблицаЗначений; cmd = Новый COMОбъект("ADODB.Command"); cmd.ActiveConnection = Соединение; cmd.CommandText = ТекстЗапроса; Попытка rs = cmd.Execute(); Для НомерСтолбца = 0 По rs.Fields.Count - 1 Цикл ИмяНовойКолонки = rs.Fields(НомерСтолбца).Name; Таблица.Колонки.Добавить(ИмяНовойКолонки); КонецЦикла; Если Не rs.eof Тогда rs.MoveFirst(); КонецЕсли; Пока Не rs.eof Цикл НоваяСтрока = Таблица.Добавить(); Для НомерСтолбца = 0 По rs.Fields.Count - 1 Цикл ИмяНовойКолонки = rs.Fields(НомерСтолбца).Name; Значение = rs.Fields.Item(ИмяНовойКолонки).Value; Если Значение Null Тогда НоваяСтрока[ИмяНовойКолонки] = Значение; КонецЕсли; КонецЦикла; rs.MoveNext(); КонецЦикла; Исключение Сообщить("Ошибка выполнения запроса: " + ОписаниеОшибки()); КонецПопытки; Возврат Таблица; КонецФункции // Пример использования ИмяСервера = "ВашСервер"; ИмяБазы = "ИмяДругойБазы"; Логин = "ВашЛогин"; Пароль = "ВашПароль"; Соединение = СоединитьСерверSQL(ИмяСервера, ИмяБазы, Логин, Пароль); Если Соединение Неопределено Тогда ТекстЗапроса = "SELECT * FROM ВашаТаблица"; // Замените на ваш запрос Данные = ПолучитьДанные(ТекстЗапроса, Соединение); Соединение.Close(); КонецЕсли; |
### Объяснение кода:
– **СоединитьСерверSQL**: Функция для создания соединения с другой базой данных. Принимает параметры: имя сервера, имя базы, логин и пароль.
– **ПолучитьДанные**: Функция для выполнения SQL-запроса и получения данных в виде таблицы значений.
– **Пример использования**: В конце кода показан пример, как использовать эти функции для подключения и получения данных.
### Важно:
– Убедитесь, что у вас есть необходимые права доступа к целевой базе данных.
– Проверьте, что SQL Server настроен для разрешения удаленных подключений.
Рекомендую посмотреть здесь: https://infostart.ru/1c/articles/1260010/