Вызов хранимой процедуры

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Вызов хранимой процедуры

Сообщение VVitafresh » 08.09.2005 (Чт) 17:47

На сервере (Sybase ASE) есть процедурка:
Код: Выделить всё

Create Proc get_kurs_val (
   @ccy  char(3),
   @ddate  datetime,
   @kurs  decimal(13,9) Output)

Нужно в коде на VB получить значение @kurs
Пробую через Command:
Код: Выделить всё

Set adoCmd = New ADODB.Command
Set adoCmd.ActiveConnection = cnSybr
adoCmd.CommandText = "get_kurs_val"
adoCmd.CommandType = adCmdStoredProc
       
sParamName = "ccy"
Set adoParam = adoCmd.CreateParameter(sParamName, adChar, adParamInput)
adoCmd.Parameters.Append adoParam
adoCmd.Parameters(sParamName).Value = "EUR"
       
sParamName = "ddate"
Set adoParam = adoCmd.CreateParameter(sParamName, adDBDate, adParamInput)
adoCmd.Parameters.Append adoParam
adoCmd.Parameters(sParamName).Value = "2005-08-31"
       
sParamName = "kurs"
Set adoParam = adoCmd.CreateParameter(sParamName, adDecimal, adParamOutput)
adoCmd.Parameters.Append adoParam
       
adoCmd.Execute
       
Temp = adoCmd.Parameters("kurs").Value

Но на аппенде первого же параметра бъет ошибку 3780:
Parameter object is improperly defined. Inconsistent or incomplete information was provided.

Что я делаю неправильно? Какой параметр (как) нужно указывать?

P.S. Через Command раньше не работал, прошу сильно не пинать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.09.2005 (Чт) 20:27

Длину в символах укажи...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 08.09.2005 (Чт) 21:53

GSerg писал(а):Длину в символах укажи...

А как указать? Я же не могу написать что-то вроде adChar(3), ведь это константа.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 08.09.2005 (Чт) 22:46

GSerg, спасибо.
Уже дошло, что четвертый параметр CreateParameter и есть размер в данном случае в символах.
Еще для последнего параметра пришлось поменять adDecimal на adDouble (почему именно так?) и все заработало!

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 09.09.2005 (Пт) 0:51

Decimal в понимании Sybase и decimal в понимании ADO - абсолютно разные вещи. Такого типа, который используется в СУБД, в клиентских языках нет, поэтому приходится выставлять Double как самый точный из имеющихся.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 09.09.2005 (Пт) 9:36

MSDN: adDecimal -- Indicates an exact numeric value with a fixed precision and scale (DBTYPE_DECIMAL).

Как понять "fixed precision and scale" (пример)? В каких случаях используется adDecimal?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 09.09.2005 (Пт) 9:38

Нет в VB такого типа. Наиболее близкий - Currency, но ты не можешь регулировать его Scale.
Используй Double, как тебе сказали.
Lasciate ogni speranza, voi ch'entrate.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 09.09.2005 (Пт) 9:45

Просто хотел узнать на будущее...
А так вопросов больше нет, буду использовать Double.
Всем спасибо :D


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList