|
Передача параметров в SP и обратно (из VB)
|
|||
---|---|---|---|
#18+
Есть на сервере хранимая процедура: 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) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2001, 12:47 |
|
Передача параметров в SP и обратно (из VB)
|
|||
---|---|---|---|
#18+
А что, нельзя оформить create proc ttt(@P1 int=0,@P2 int=0,P3 int=0, @P4 int=0, @R int OUTPUT) --------------!! и потом брать результат из последнего Parameters. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2001, 14:26 |
|
Передача параметров в SP и обратно (из VB)
|
|||
---|---|---|---|
#18+
Я для запуска сохр. процедуры и возвращения параметра написал небольшую функцию... вроде до сих пор не подводила. 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 разницы быть не должно - может, и заработает! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2001, 15:41 |
|
Передача параметров в SP и обратно (из VB)
|
|||
---|---|---|---|
#18+
Дело в следующем. На сервер посылаются запросы, он же в ответ выплевывает таблицы выборок("резалты" по русски). Еще выдается информация о количестве обработанных строк, в Query Analizer это число пишется как (ХХХ row(s) affected). Больше никакого обмена данными НЕТ. Т.е. параметр в принципе обратно в клиентскую часть передаться не может. Не знаю как в VB, в Delphi есть специальный объект для выполнения запроса и специальный обыект для выполнения процедуры. Последний видит параметры, но это уже реализовано в клиентской части добавлением запроса типа "select @P4". Но этот механизм скрыт от программиста и ему представляется что параметры передаются через процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2001, 15:46 |
|
Передача параметров в SP и обратно (из VB)
|
|||
---|---|---|---|
#18+
Незнаю как в 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2001, 18:58 |
|
Передача параметров в SP и обратно (из VB)
|
|||
---|---|---|---|
#18+
Все нормально работат как в Delphi, так и в VBA. Нужно только не забыть три вещи: 1. В тексте SP возле соответсвующего параметра нужно указывать OUTPUT и не только в описании текста SP, НО И ПРИ ЕЕ ВЫЗОВЕ С ПОМОЩЬЮ EXEC. 2. Среди ADO-компонентов есть такие Parameters - они как раз и используются для передачи параметров, что в ту сторону, что обратно. Так вот у них есть свойство Direction (по крайней мере в Delphi оно так называется). Его нужно правильно выставить. 3. После вызова хранимой процедуры возвращаемый через параметр результат сам ни в какую ни в локальную, ни в глобальную переменную не попадает. Просто свойство объекта Parameter получает новое значение. Оттуда его и нужно считать. Вот, собсно, и все . ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2001, 21:56 |
|
|
start [/forum/topic.php?desktop=1&fid=46&tid=1827441]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 150ms |
0 / 0 |