Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 09:29

Передать параметры в функцию SQL из 1с

Автор chernike, 09 фев 2015, 07:27

0 Пользователей и 1 гость просматривают эту тему.

chernike

Доброго времени суток.
На sql есть функция, которая возвращает таблицу из двух колонок.
в функции 4 параметра.
Запускал ее через view со следующим кодом:
SELECT     *
FROM         dbo.RoundTime(@p1, @p2, @p3, @p4)
p1 - строка
p2,p3,p4 - число
Открывалась форма,в которой я задавал параметры и все работало.
в 1с реализовал следующее:
Command = Новый COMОбъект("ADODB.Command");   
RecordSet = Новый COMОбъект("ADODB.RecordSet");
Command.ActiveConnection =  ADOСоединение;
Param1 = Command.CreateParameter("@p1", 200, 1,100, параметр1;   
Command.Parameters.Append(Param1);
Param2 = Command.CreateParameter("@p2", 3, 1, 50, параметр1);
Command.Parameters.Append(Param2);   
Param3 = Command.CreateParameter("@p3", 3, 1, 50, параметр2);
Command.Parameters.Append(Param3);
Param4 = Command.CreateParameter("@p4", 3, 1, 50, параметр3);
Command.Parameters.Append(Param4);
Command.CommandText = " select * from dbo.RoundTime('"+ Param1 +"',"+param2+"','"+Param3 + "','"+ Param4+"')";
RecordSet = Command.Execute();
При execute вылетает ошибка:
Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка преобразования значения varchar "COMОбъект" в тип данных int.
Не могу понять как правильно передать параметры в функцию.

MuI_I_Ika

А зачем вы вставляете строковые переменные: ('"+ Param1 +"',"+param2+"','"+Param3 + "','"+ Param4+"')"

Если вы до этого все параметры уже задали?

chernike

Изначально я писал просто Command.CommandText = " select * from dbo.RoundTime
Программа выдало сообщение что функция не нашла параметры
потом стал писать Command.CommandText = " select * from dbo.RoundTime(Param1,Param2,Param3,Param4) - не может перевести из Com-объекта в int
Command.CommandText = " select * from dbo.RoundTime(@p1,@p2,@p3,@p4)  - скалярные переменные,функция не выполняется

MuI_I_Ika

Правильно вот это: Command.CommandText = " select * from dbo.RoundTime(@p1,@p2,@p3,@p4)

А почему там скалярные переменные нельзя нужно разбираться.

chernike

Command.CommandText = " select * from dbo.RoundTime(@p1,@p2,@p3,@p4)";
RecordSet = Command.Execute();
При  execute выдало сообщение Необходимо объявить скалярную переменную "@p1"

Теги:

Похожие темы (4)

Рейтинг@Mail.ru

Поиск