Получить единственное значение из SQL
Необходимо из 1С 8.2 подключится к MS SQL и выполнить следующий код:
declare @num_id int
exec @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string'
Как видно, из SQL возвращается одно единственное число.
Как это реализовать?.
Когда нужно было из SQL получать таблицу, использовал код (см. ниже)
Но в данном случае код не работает. Появляется ошибка:
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(98)}: Ошибка при получении значения атрибута контекста (EOF): Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт.
Код:
Как в 1с реализовать получение одного значения из SQL?
declare @num_id int
exec @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string'
Как видно, из SQL возвращается одно единственное число.
Как это реализовать?.
Когда нужно было из SQL получать таблицу, использовал код (см. ниже)
Но в данном случае код не работает. Появляется ошибка:
{ВнешняяОбработка.ВнешняяОбработка2.Форма.Форма.Форма(98)}: Ошибка при получении значения атрибута контекста (EOF): Произошла исключительная ситуация (ADODB.Recordset): Операция не допускается, если объект закрыт.
Код:
RS = Новый COMОбъект ("ADODB.RecordSet");
RS.CursorLocation = 2;
RS.CursorType = 0;
RS.LockType = 1;
sql = "
|declare @num_id int
|EXECUTE @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string' ";
RS = Conn.Execute(sql);
Для каждого Поле ИЗ RS.Fields Цикл
Попытка
ТЗ_результат.Колонки.Добавить(Поле.Name , , );
Исключение
ТЗ_результат.Колонки.Добавить("Поле" + Строка(ТЗ_результат.Колонки.Количество()+1) , , Поле.Name);
КонецПопытки;
КонецЦикла;
Пока НЕ (RS.EOF) Цикл
стр_ТЗ_результат = ТЗ_результат.Добавить();
сч_полей = 0;
Для каждого Поле ИЗ RS.Fields Цикл
сч_полей = сч_полей + 1;
Попытка
стр_ТЗ_результат[RS.Fields(сч_полей-1).Name] = RS.Fields(сч_полей-1).Value;
Исключение
стр_ТЗ_результат["Поле" + Строка(сч_полей)] = RS.Fields(сч_полей-1).Value;
КонецПопытки;
КонецЦикла;
RS.MoveNext();
КонецЦикла;
RS.Close();
Conn.Close();
ПоказатьКак в 1с реализовать получение одного значения из SQL?
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Как Вам правильно заметили, необходимо подключить базу
Попытка
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=SQLOLEDB.1; Persist Security Info=false;
|Data Source=" + Сервер +";
|User ID=" + Пользователь +";
|Password=" + Пароль + ";" +
?(ЗначениеЗаполнено(База), " Initial Catalog=" + База + ";",""));
Исключение
Для каждого Ошибка Из Соединение.Errors Цикл
Сообщить("Ошибка " + Ошибка.nativeError + ": " + Ошибка.Description);
КонецЦикла;
Соединение = Неопределено;
КонецПопытки;
Показать
Пробовал и такой вариант.
В 1с ничего не меняется, возникает та же ошибка.
Если запустить в студии
declare @num_id int
EXECUTE @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string' ";
то результат выполнения будет :
Commands completed successfully.
А если выполнить
declare @num_id int
EXECUTE @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string' ";
select @num_id
то результатом будет таблица с одной строкой и одним столбцом.
Но повторю, в 1с возникает та же ошибка.
В 1с ничего не меняется, возникает та же ошибка.
Если запустить в студии
declare @num_id int
EXECUTE @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string' ";
то результат выполнения будет :
Commands completed successfully.
А если выполнить
declare @num_id int
EXECUTE @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string' ";
select @num_id
то результатом будет таблица с одной строкой и одним столбцом.
Но повторю, в 1с возникает та же ошибка.
Добрый день!
А может попробовать так:
Тоже только с запросами так работаем.
А может попробовать так:
RS = Новый COMОбъект("ADODB.Recordset");
RS.Open(ТекстЗапроса, Connection, 3);
Пока RS.EOF() = 0 Цикл
...
RS.MoveNext();
КонецЦикла;
RS.Close();
Тоже только с запросами так работаем.
Спасибо 5,7.
В итоге заработало когда исправил запрос к SQL на
set nocount on;
declare @num_id int
exec @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string'
select @num_id as num_id
В этом случае заработал и мой вариант обработки через
RS = Conn.Execute(sql);
но и вариант RS.Open(ТекстЗапроса, Connection, 3); тоже работает
В итоге заработало когда исправил запрос к SQL на
set nocount on;
declare @num_id int
exec @num_id = [RT].[UD_INT_CREATE_] 'Some string', 'E', 200, 'Some string'
select @num_id as num_id
В этом случае заработал и мой вариант обработки через
RS = Conn.Execute(sql);
но и вариант RS.Open(ТекстЗапроса, Connection, 3); тоже работает
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот