|
|
#1 |
|
Участник
|
Добрый день, уважаемые посетители форума
![]() Вызываю хранимую процедуру SQL из кода Axapta. Код следующий. X++: OdbcConnection OdbcCon;
Statement st;
ResultSet resultSet;
str str_st;
LoginProperty LP = new LoginProperty();
;
super();
ttsbegin;
select _pccs;
if (_pccs)
{
LP.setServer(_pccs.DSN);
LP.setDatabase(_pccs.DBName);
LP.setUsername(_pccs.Login);
LP.setPassword(_pccs.Password);
OdbcCon = new OdbcConnection(LP);
st = OdbcCon.createStatement();
str_st = StrFmt("exec [dbo].[SelectAndUpdateStatusSN_ForAXDB] 31, '%1'", date2str(today(),213,2,3,2,3,4));
// str_st ="exec [dbo].[SelectAndUpdateStatusSN_ForAXDB] @UserID=31, @bDate=Convert(DATETIME, '2009-01-20 11:51:07.000', 102)";
// str_st = "exec [dbo].[SelectAndUpdateStatusSN_ForAXDB] 31, N'20.01.09'";
resultSet = st.executeQuery(str_st);
while (resultSet.next()) // вот здесь происходит ошибка
{
str_st = resultSet.getString(1);
str_st = resultSet.getString(2);
str_st = resultSet.getString(3);
str_st = resultSet.getString(4);
str_st = resultSet.getString(5);
str_st = resultSet.getString(6);
str_st = resultSet.getString(7);
str_st = resultSet.getString(8);
}
}
ttscommit;Невозможно выбрать запись в '' ('') База данных SQL обнаружила ошибку. Описание ошибки SQL: [Microsoft][ODBC SQL Server Driver][SQL Server]Параметры языка изменены на "русский". Оператор SQL: exec [dbo].[SelectAndUpdateStatusSN_ForAXDB] 31, '01-20-2009' ![]() В чем причина? Что делать?
__________________
AX 3.0, Build #9.3 |
|
|
|
|
#2 |
|
Administrator
|
хранимая процедура не возвращает записи. Если только она не состоит из одного селекта.
Вам нужно делать табличную функцию и вызывать ее не через exec, а через select
__________________
Возможно сделать все. Вопрос времени |
|
|
|
|
#3 |
|
Участник
|
А если в хранимой процедуре будет только select, такой вариант отработает?
__________________
AX 3.0, Build #9.3 |
|
|
|
|
#4 |
|
Участник
|
Ну неправда-же!
ХП МОЖЕТ возвращать записи, просто получить их не так просто, как из ф-ии. Вариантов несколько - через временную таблицу (SQL-ную, а не Аксаптовскую ), через OPENQUERY.Хотя, конечно, если укладывашься в ограничения UDF, то лучше использовать их. Последний раз редактировалось egorych; 20.01.2009 в 13:47. |
|
|
|
|
#5 |
|
Участник
|
__________________
AX 3.0, Build #9.3 |
|
|
|
|
#6 |
|
Участник
|
ну, например так
X++: select * from openquery(loopback, 'exec sp_who') |
|
|
|
|
#7 |
|
Участник
|
Цитата:
__________________
AX 3.0, Build #9.3 |
|
|
|
|
#8 |
|
Участник
|
Хранимые процедуры вполне нормально возвращают результаты (запросы). Однако есть некоторые "тонкости".
1. Дело в том, что ряд команд SQL-сервера возвращают нечто вроде "отчета" об успешном своем выполнении. В данном случае, вероятно, команда X++: SET LANGUAGE N'русский'Цитата:
Параметры языка изменены на "русский"
Чтобы избежать подобных недоразумений необходимо первой командой внутри хранимой процедуры сделать такую настройку X++: SET NOCOUNT ON 2. В качестве возвращаемого значений из хранимой процедуры при использовании statment.executeQuery() ожидается ResultSet. Он будет сформирован корректно в том случае, если последней исполняемой командой в хранимой процедуре будет запрос. Т.е. команда SELECT ... FROM ... OpenQuery() - в данном случае лишний. |
|
|
|
|
#9 |
|
Модератор
|
А вот это напрасно
Цитата:
X++: while (resultSet.next()) // вот здесь происходит ошибка X++: set nocount on set ansi_warnings off
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
|
| За это сообщение автора поблагодарили: Logger (3). | |
|
|
#10 |
|
Участник
|
Кстати, константы типа Даты-Время лучше передавать как строку вида
'YYYYMMDD' Это универсальный формат, не зависящий от текущех настроек формата даты сервера. Т.е. лучше формировать строку так X++: str_st = StrFmt("exec [dbo].[SelectAndUpdateStatusSN_ForAXDB] 31, '%1'", date2str(today(),321,2,0,2,0,4)); |
|
|
|
|
#11 |
|
Administrator
|
Не буду спорить с гуру. В свое время с наскоку не получилось - вот и решил, что не возвращают. Был неправ.
__________________
Возможно сделать все. Вопрос времени |
|
|
|
|
#12 |
|
Участник
|
Цитата:
__________________
AX 3.0, Build #9.3 |
|
|
|
|
#13 |
|
Участник
|
Цитата:
__________________
AX 3.0, Build #9.3 |
|
|