База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как подключиться из 1С к другой базе 1С MSSQL запросом через ADO?
- В этой теме 1 ответ, 2 участника, последнее обновление 1 год назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
4 декабря 2024 в 8:00 #30720
Как из базы 1С на сервере MSSQL программно подключиться к другой базе 1C MSSQL и получить оттуда запросом нужные данные или выполнить в подключенной базе необходимые действия?
-
4 декабря 2024 в 8:00 #30721
Для подключения из одной базы 1С на сервере MSSQL к другой базе 1С на том же сервере и выполнения запросов, можно использовать библиотеку ADO (ActiveX Data Objects). Ниже приведен пример, как это можно сделать.
### Шаги для подключения и выполнения запросов:
1. **Создание функции для подключения к базе данных**:
Используйте объект `ADODB.Connection` для создания соединения с другой базой данных.2. **Выполнение SQL-запросов**:
Используйте объект `ADODB.Command` для выполнения SQL-запросов и получения данных.### Пример кода:
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/
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.