powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передача параметров в SP и обратно (из VB)
6 сообщений из 6, страница 1 из 1
Передача параметров в SP и обратно (из VB)
    #32001691
AlexanderVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть на сервере хранимая процедура:
create proc ttt(@P1 int=0,@P2 int=0,P3 int=0, @P4 int=0)
as
.....
.....
return @R
Для ее выполнения (приложение на VB6) используется такой код:
......
cmCom.CommandType = adCmdText
cmCom.CommandText = "EXEC ttt @P1=50, @P4=150"
cmCom.Execute
.......
Все ОК, но никак не могу получить возвращаемый параметр.
cmdCom.Parameters(0).Value - остается пустым
Подскажите как тут быть. (Необходимо передовать только часть входных параметров).
Всех благ, Александр. (stulikov@rambler.ru)
...
Рейтинг: 0 / 0
Передача параметров в SP и обратно (из VB)
    #32001694
AnKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что, нельзя оформить
create proc ttt(@P1 int=0,@P2 int=0,P3 int=0, @P4 int=0, @R int OUTPUT)
--------------!!
и потом брать результат из последнего Parameters.
...
Рейтинг: 0 / 0
Передача параметров в SP и обратно (из VB)
    #32001698
Staple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я для запуска сохр. процедуры и возвращения параметра написал небольшую функцию... вроде до сих пор не подводила.

Function execSProc(pwp As String) 'pwp - тот самый запрос, можно без exec в начале.
Dim cn As ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As ADODB.Recordset
Set cn = Application.CurrentProject.Connection
cmd.ActiveConnection = cn
cmd.CommandText = pwp
Set rs = cmd.Execute
execSProc = rs("result")
rs.Close
cn.Close
End Function

А сама процедура в общем виде выглядит так:

Create procedure pr1
@parm1 int,
@parm2 int,
...
As
SET NOCOUNT ON /*Не знаю, как в VB, а в Аксесе (VBA) без этого нельзя - он начнет жалобно скулить и ругаться*/
/* далее - набор эротичных телодвижений и, наконец, - */
SELECT [то_что_нужно] AS result
SET NOCOUNT OFF

Попробуй, здесь вроде у VBA и VB разницы быть не должно - может, и заработает!
...
Рейтинг: 0 / 0
Передача параметров в SP и обратно (из VB)
    #32001699
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в следующем.
На сервер посылаются запросы, он же в ответ выплевывает таблицы выборок("резалты" по русски). Еще выдается информация о количестве обработанных строк, в Query Analizer это число пишется как (ХХХ row(s) affected). Больше никакого обмена данными НЕТ. Т.е. параметр в принципе обратно в клиентскую часть передаться не может. Не знаю как в VB, в Delphi есть специальный объект для выполнения запроса и специальный обыект для выполнения процедуры. Последний видит параметры, но это уже реализовано в клиентской части добавлением запроса типа "select @P4". Но этот механизм скрыт от программиста и ему представляется что параметры передаются через процедуры.
...
Рейтинг: 0 / 0
Передача параметров в SP и обратно (из VB)
    #32001711
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Незнаю как в Delphi, но сильно подозреваю что примерно тоже самое (говорим про ADO!), а в VB наиболее быстрый способ, корректно работающий как с входными так и с выходными параметрами заключается в том, чтобы клиент не запрашивал у сервера тип и имя параметра (т.е. все делается 'ручками'):

Create Procedure TestProc @Parameter1 Int, @Parameter2 Int, @Parameter3 Int Output
As
Set Nocount On
Set @Parameter3 = @Parameter1 + @Parameter2
Return



Dim cmd As New Command, prm As New Parameter
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "TestProc"
cmd.CommandType = adCmdStoredProc
Set prm = cmd.CreateParameter("@Parameter1", adInteger, , , 123)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@Parameter2", adInteger, , , 456)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@Parameter2", adInteger, adParamOutput)
cmd.Parameters.Append prm
cmd.Execute
MsgBox prm
Set prm = Nothing
Set cmd = Nothing
...
Рейтинг: 0 / 0
Передача параметров в SP и обратно (из VB)
    #32001737
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все нормально работат как в Delphi, так и в VBA. Нужно только не забыть три вещи:
1. В тексте SP возле соответсвующего параметра нужно указывать OUTPUT и не только в описании текста SP, НО И ПРИ ЕЕ ВЫЗОВЕ С ПОМОЩЬЮ EXEC.
2. Среди ADO-компонентов есть такие Parameters - они как раз и используются для передачи параметров, что в ту сторону, что обратно. Так вот у них есть свойство Direction (по крайней мере в Delphi оно так называется). Его нужно правильно выставить.
3. После вызова хранимой процедуры возвращаемый через параметр результат сам ни в какую ни в локальную, ни в глобальную переменную не попадает. Просто свойство объекта Parameter получает новое значение. Оттуда его и нужно считать.
Вот, собсно, и все .
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Передача параметров в SP и обратно (из VB)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]