Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Получение значения хранимой процедуры  [new]
Сосед по интернету
Guest
Здравствуйте, уважаемые Гуру!
Ситуация такая: есть у меня хранимая процедура в MSSQL которая возвращает одно значение. Как из VBA можно выполнить хранимую процеду я знаю (execute), но получить возвращаемое значение у меня не получается :(
Как мне осуществить эту затею?
27 апр 06, 19:21    [2611572]     Ответить | Цитировать Сообщить модератору
 Re: Получение значения хранимой процедуры  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40414
Я никогда этого не делал и вообще слабо разбираюсь, но если она возвращает значение, то почему бы не обратиться к ней в запросе?
27 апр 06, 19:26    [2611583]     Ответить | Цитировать Сообщить модератору
 Re: Получение значения хранимой процедуры  [new]
Сосед по интернету
Guest
Как?
Например
msgbox c.execute "exec my_store_proc"
выдает акцесную ошибку, т.е. метод execute никаких значений не возвращает.

Тестовая хранимая процедура простая и состоит из одной строчки: return 1
27 апр 06, 19:30    [2611592]     Ответить | Цитировать Сообщить модератору
 Re: Получение значения хранимой процедуры  [new]
Сосед по интернету
Guest
Тьфу! :-)

Состоит из такой строчки: select 10
27 апр 06, 19:31    [2611597]     Ответить | Цитировать Сообщить модератору
 Re: Получение значения хранимой процедуры  [new]
ADO.Command
Guest
из справки
ActiveConnection, CommandText, CommandTimeout, CommandType, Size, and Direction Properties Example (VB)


This example uses the ActiveConnection, CommandText, CommandTimeout, CommandType, Size, and Direction properties to execute a stored procedure.


Public Sub ActiveConnectionX()

    Dim cnn1 As ADODB.Connection
    Dim cmdByRoyalty As ADODB.Command
    Dim prmByRoyalty As ADODB.Parameter
    Dim rstByRoyalty As ADODB.Recordset
    Dim rstAuthors As ADODB.Recordset
    Dim intRoyalty As Integer
    Dim strAuthorID As String
    Dim strCnn As String

    ' Define a command object for a stored procedure.
    Set cnn1 = New ADODB.Connection
    strCnn = "Provider=sqloledb;" & _
        "Data Source=srv;Initial Catalog=Pubs;User Id=sa;Password=; "
    cnn1.Open strCnn
    Set cmdByRoyalty = New ADODB.Command
    Set cmdByRoyalty.ActiveConnection = cnn1
    cmdByRoyalty.CommandText = "byroyalty"
    cmdByRoyalty.CommandType = adCmdStoredProc
    cmdByRoyalty.CommandTimeout = 15
        
    ' Define the stored procedure's input parameter.
    intRoyalty = Trim(InputBox( _
        "Enter royalty:"))
    Set prmByRoyalty = New ADODB.Parameter
    prmByRoyalty.Type = adInteger
    prmByRoyalty.Size = 3
    prmByRoyalty.Direction = adParamInput 'нужно будет adParamReturnValue eсли   
'возращаемое значение, если выходящий параметр, то adParamOutPut
    prmByRoyalty.Value = intRoyalty
    cmdByRoyalty.Parameters.Append prmByRoyalty
  
    ' Create a recordset by executing the command.
    Set rstByRoyalty = cmdByRoyalty.Execute()
        
    ' Open the Authors table to get author names for display.
    Set rstAuthors = New ADODB.Recordset
    rstAuthors.Open "Authors", strCnn, , , adCmdTable
    
    ' Print current data in the recordset, adding
    ' author names from Authors table.
    Debug.Print "Authors with " & intRoyalty & _
        " percent royalty"
    Do While Not rstByRoyalty.EOF
        strAuthorID = rstByRoyalty!au_id
        Debug.Print , rstByRoyalty!au_id & ", ";
        rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
        Debug.Print rstAuthors!au_fname & " " & _
            rstAuthors!au_lname
        rstByRoyalty.MoveNext
    Loop

    rstByRoyalty.Close
    rstAuthors.Close
    cnn1.Close
    
End Sub
27 апр 06, 19:31    [2611599]     Ответить | Цитировать Сообщить модератору
 Re: Получение значения хранимой процедуры  [new]
hhhhhhhh
Guest
Сосед по интернету
Тьфу! :-)

Состоит из такой строчки: select 10

Тогда это уже не вполне "ХП возвращает значение".
Можно просто
CurrentProject.Connection.Execute("exec prcMyProc").Fields(0)
.....если не ошибся в синтаксисе. Попробуйте.
27 апр 06, 19:34    [2611611]     Ответить | Цитировать Сообщить модератору
 Re: Получение значения хранимой процедуры  [new]
Сосед по интернету
Guest
ADO.Command:
Ого! За инфо спасибо, приму к сведению.

hhhhhhhh:
Да, вы правы, это уже рекордсет... В справке такого синтаксиса не увидел.
Большое спасибо, работает.
27 апр 06, 19:44    [2611633]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить