powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в коде VB получить значение выходного параметра хранимой процедуры???
13 сообщений из 13, страница 1 из 1
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229888
Kyubi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
делаю клиентское приложение в access 2007 для sql server 2005

обработчик события click:

передаю входные параметры ХП: @b_code, @r_un, @date_z, @srok_v (это всё Input), выходной параметр: @out_msg (output):

CurrentDb.QueryDefs("new_registration").SQL = "use library EXECUTE new_registration @b_code='" & Me.ПолеСоСписком20.Value & "', @r_un='" & [ПолеСоСписком3] & "', @date_z='" & Me.Поле58.Value & "', @srok_v='" & Me.Поле38.Value & "', @out_msg=1 "

выполняю запрос:
DoCmd.OpenQuery ("new_registration")

запрос хорошо отрабатывается, но вот не мзнаю, как в VB получить значение выходного параметра @out_msg (int) !!!

вот сама ХП:

ALTER proc [dbo].[new_registration]
@b_code char(10), @r_un int, @date_z datetime, @srok_v datetime=null, @out_msg int output
as
exec ostatok /*обращаюсь к процедуре подсчета текущего числа экземпляров каждой книги по каждому залу*/
declare @rr char(10)
set @rr=(select library.dbo.readers.rr_id from library.dbo.readers where library.dbo.readers.reader_un=@r_un) /*вычисляю номер зала, за которым закреплен читатель*/

if (select book_ost from library.dbo.book_count where library.dbo.book_count.book_code=@b_code and library.dbo.book_count.rr_id=@rr)>0 /*определяю наличие экземпляров (>=1) выбранной книги в зале*/
and (select library.dbo.readers.Date_vyp from library.dbo.readers where library.dbo.readers.reader_un=@r_un) is NULL /*"валидация" читателя*/
begin
INSERT INTO Registration (book_code, reader_un, date_zakr, srok_vozvr) VALUES (@b_code, @r_un, convert(datetime,@date_z,104), convert(datetime,@srok_v,104)) /*если хотя бы один экземпляр выбранной книги имеется в наличии, осуществляю акт регистрации записи в регистрационном журнале*/
exec ostatok /*обновляю сведения о текущем количестве книг*/
set @out_msg=1
end

else
begin
set @out_msg=0
end

return @out_msg

Помогите, пожалуйста, братцы, сроки меня поджимают уже!!!!
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229922
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо возится с выходными параметрами, возвращай все что нужно через рекродсеты.
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229929
Kyubi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
но мне не нужны рекордсеты (я не отчет строю, и не выборку какую-нибудь, а просто добавляю запись в таблицу с предпроверкой кучи условий), так вот, в зависимости от сценария выполнения процедуры (блок If), мне в accesse нужно будет показать одно сообщение: типа "ок, запись добавлена", если же процедура выполнилась по другому сценарию (блок else), то показываю пользователю другой мессадж: "запись НЕ сохранена, перепроверь входящие данные". так вот чтобы показывать эти мессаджы, надо знать, как процедура выполнилась, а кроме привязки этого результата к выходным параметрам, я ничего не придумала...
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229930
Kyubi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
везде пишут про ADODB.Command, НО:
Dim cmd As ADODB.Command сразу выдает ошибку: User-defined type not defined
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229932
Kyubi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это вообще возможно: присвоить переменной VB значение выходного параметра ХП SQL???????
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229935
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kyubi,
даже если Вас съел лев у вас два пути:
- добавить ссылку на библиотеку Microsoft ActiveX Data Objects 2.X Library
- использовать другой синтаксис:
Код: plaintext
1.
2.
3.
Dim cmd AsObject

' ...
Set cmd = CreateObject("ADODB.Command")
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229938
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KyubiЭто вообще возможно: присвоить переменной VB значение выходного параметра ХП SQL???????можно
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229943
Kyubi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
Dim cmd AsObject

' ...
Set cmd = CreateObject("ADODB.Command")
[/quot]

скукотища, не могли бы Вы поподробнее расписать этот момент, то есть слепить аналог этому:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim cmd As ADODB.Command 
Set cmd = New ADODB.Command 
cmd.ActiveConnection = CurrentProject.Connection 
cmd.CommandText = "ХП" 
cmd.CommandType = adCmdStoredProc 
cmd.Parameters.Append cmd.CreateParameter("out_msg", adInteger, adParamOutput) 
cmd.Execute 
f = cmd.Parameters("out_msg")

используя Dim cmd AsObject и т.д.
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229949
Kyubi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пошла другим путем: добавила-таки ссылку на Microsoft ActiveX Data Objects 2.X Library в Tools\References

сделала тестовую ХП "fu"^

Код: plaintext
1.
2.
3.
4.
ALTER proc [dbo].[fu]
@o int output
as
set @o= 1 
return @o

вызываю в VB:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Dim cmd As ADODB.Command
Dim prm As ADODB.Parameter
Set cmd = New ADODB.Command
cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "fu"
cmd.CommandType = adCmdStoredProc
Set prm = cmd.CreateParameter("o", adInteger, adParamOutput)
cmd.Parameters.Append prm
cmd.Execute
f = cmd.Parameters("o") 

выдает ошибку: "Произошли ошибки во время выполнения пошаговой операции OLE DB. По восзможности проверьте значения всех состояний OLE DB/ Работа не выполнена"

укажите, пожалуйста, на мою ошибку!
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37229988
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Kyubiделаю клиентское приложение в access 2007 для sql server 2005
Kyubiвыдает ошибку: "Произошли ошибки во время выполнения пошаговой операции OLE DB. По восзможности проверьте значения всех состояний OLE DB/ Работа не выполнена"

...эээ, а "клиентское приложение в access 2007" у вас НЕ adp ?
просто тот код, что выше, - рабочий. но только в адп,
если у вас mdb/accdb - то какой же тут CurrentProject.Connection ?

нужно создать коннекшен к серверу, и уже его присваивать cmd.ActiveConnection

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim cn As ADODB.connection
Set cn = New ADODB.connection
' варианты строки подключения тут - http://connectionstrings.com/sql-server-2005
ConStr = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;" 
cn.open ConStr 
cmd.ActiveConnection = cn
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37230051
ё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ё
Гость
Kyubiно мне не нужны рекордсеты (я не отчет строю, и не выборку какую-нибудь, а просто добавляю запись в таблицу с предпроверкой кучи условий), так вот, в зависимости от сценария выполнения процедуры (блок If), мне в accesse нужно будет показать одно сообщение: типа "ок, запись добавлена", если же процедура выполнилась по другому сценарию (блок else), то показываю пользователю другой мессадж: "запись НЕ сохранена, перепроверь входящие данные". так вот чтобы показывать эти мессаджы, надо знать, как процедура выполнилась, а кроме привязки этого результата к выходным параметрам, я ничего не придумала...
раз смысл вых.параметра только в этом,
то, тогда, проще "незаморачиватся" с ними,
а использовать "код возврата" процедуры (вы, кстати, его в своей процедуре устанавливаете)
типа так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
ALTER  proc [dbo].[fu]
as
begin
  declare @o int
  set @o = datepart(s, getdate())
  set @o = @o %  2  
  return @o
end
Код: plaintext
1.
2.
3.
cmd.Parameters.Refresh
cmd.Execute
f = cmd.Parameters( 0 ).Value
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37230152
Guest33
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему сразу АДО? ДАО тоже может
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub Get_DAO_OutputParam()
Dim q As DAO.QueryDef
Dim txt As String
Dim RetVal As Long
Dim OutParam As Long
Dim r As DAO.Recordset

txt = "ODBC;DSN=Radio;UID=sa;PWD=;DATABASE=Radio;Network=DBNMPNTW"
Set q = CurrentDb.CreateQueryDef("")
q.Connect = txt

txt = "declare @Unicum int " & _
"      declare @RC int " & _
"EXEC @RC = GetUNum 401, 'р1', 2, @Unicum OUTPUT " & _
"select @Rc RetVal, @Unicum OutParam"

q.SQL = txt
q.ReturnsRecords = True
Set r = q.OpenRecordset
OutParam = r!OutParam 'Output parameter
RetVal = r!RetVal ' Return value
r.Close: Set r = Nothing
q.Close: Set q = Nothing

Debug.Print RetVal, OutParam
End Sub
...
Рейтинг: 0 / 0
Как в коде VB получить значение выходного параметра хранимой процедуры???
    #37230176
Kyubi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное человеческое СПАСИБО, а ососбенно ё !!!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в коде VB получить значение выходного параметра хранимой процедуры???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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