Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADO c SQL- Server, Возврат параметра из хранимой процедуры  
:(
    Опции темы
kleon
Дата 24.8.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 1.4.2005

Репутация: нет
Всего: нет



Как получить в ADO параметр из хранимой процедуры, просмотрел несколько тем, увы. Не могу получить значение @FirstID в проге на VB. Всегда работал с DAO без проблем, а здесь - "засада".

Код

use dbSys
GO
Create Procedure pr_GetFirstRecordID
@FirstID int OUTPUT
as
RETURN(Select min(PersonID) FROM Recv_P)
go


PM MAIL   Вверх
boevik
Дата 25.8.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Нужно использовать ADO.Command.
Для вызова нужно создать объект Command, присоединить Parameters типа InOut.
Поищи примеры по ключевым словам ADO.Command,Parameters 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
kleon
Дата 26.8.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 1.4.2005

Репутация: нет
Всего: нет



Попробовал создать параметр и получил сообщение об ошибке, что хранимая процедура требует параметр "@maxID". Я, вроде бы, его представил. Предположительно, возвращаемый параметр должен лежать в retValue или я чего то не понимаю?

Код

 Public Sub ADO_RET()
        Dim cnn As New ADODB.Connection
        Dim mRet As New ADODB.Parameter
        'Dim class2 As ADODB.Parameter
        Dim cmm As New ADODB.Command
        Dim retValue As Integer
        cnn.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" & _
                "Initial Catalog=dbSys;Data Source=HOME-E9F4E9B27E")
        With cmm
            mRet = .CreateParameter("@maxID", ADODB.DataTypeEnum.adInteger, _
                       ADODB.ParameterDirectionEnum.adParamReturnValue, 4, retValue)
            .Parameters.Append(mRet)
            .Prepared = True
            .ActiveConnection = cnn
            .CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
            .CommandText = "SearchMAxID"
            .Execute()
            Debug.WriteLine("retValue=", CStr(retValue))
        End With
    End Sub


Тескт хранимой процедуры:
Код

Create procedure SearchMaxID
@maxID int OUTPUT
as
Return(Select MAX(PersonID) From dbo.Recv_P)




Это сообщение отредактировал(а) kleon - 26.8.2007, 14:29
PM MAIL   Вверх
boevik
Дата 26.8.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 12
Всего: 35



Тут у нас небольшой балаган.
Начнем с процедуры:
1) @maxID не  нужен, так не не используется в процедуре
Код

Create procedure SearchMaxID
as
Return(Select MAX(PersonID) From dbo.Recv_P)


2) Соотвественно, теперь в коде, надо создать параметер только для возврата.
Код

Public Sub ADO_RET()
        Dim cnn As New ADODB.Connection
        Dim mRet As New ADODB.Parameter
        'Dim class2 As ADODB.Parameter
        Dim cmm As New ADODB.Command
        Dim retValue As Integer
        cnn.Open("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" & _
                "Initial Catalog=dbSys;Data Source=HOME-E9F4E9B27E")
        With cmm
            mRet = .CreateParameter("maxID", ADODB.DataTypeEnum.adInteger, _
                       ADODB.ParameterDirectionEnum.adParamReturnValue, 4, retValue)
            .Parameters.Append(mRet)
            .Prepared = True
            .ActiveConnection = cnn
            .CommandType = ADODB.CommandTypeEnum.adCmdStoredProc
            .CommandText = "SearchMAxID"
            .Execute()
            Debug.WriteLine("retValue=", CStr(cmd.Parameters("maxID")))
        End With
    End Sub



Примерно так. 


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.