![]() |
#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-ную, а не Аксаптовскую ![]() Хотя, конечно, если укладывашься в ограничения 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 |
|