powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов ХП с параметром adDecimal
7 сообщений из 7, страница 1 из 1
Вызов ХП с параметром adDecimal
    #32430109
Фотография grinya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня хранимая процедура на MSSQL
типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE PROCEDURE dbo.uspw_ImportBills 
@firm int, 
...
@price decimal( 18 ),		
@sum decimal( 18 ),	
@discount decimal( 5 ), 
...
AS ...


Вызываю ее из Екселя через ADODB.Command таким определением параметров:
Код: plaintext
1.
2.
3.
4.
5.
6.
Set Prm = Cmd.CreateParameter( "@price" , adDecimal, adParamInput,  18 , Trim(Cells( 2 ,  17 )))
Cmd.Parameters.Append Prm
Set Prm = Cmd.CreateParameter( "@sum" , adDecimal, adParamInput,  18 , Trim(Cells( 2 ,  18 )))
Cmd.Parameters.Append Prm
Set Prm = Cmd.CreateParameter( "@discount" , adDecimal, adParamInput,  3 , Trim(Cells( 2 ,  19 )))
Cmd.Parameters.Append Prm


при этом получаю сообщение - Precision is invalid. Не пойму, где ошибка - на сервере в ХП или при вызове.
Подскажите, как тут правильно указать Precision, чтобы нормально все передавалось, плиз?
(или может ссылка на FAQ есть, справки толковой по ADO не нашел :( )
...
Рейтинг: 0 / 0
Вызов ХП с параметром adDecimal
    #32430162
Alex_2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка в размерности, а не в типе данных.
вот в этой строке:

Код: plaintext
Set Prm = Cmd.CreateParameter( "@discount" , adDecimal, adParamInput,  3 , Trim(Cells( 2 ,  19 )))

вместо 3 надо написать 5, как в ХП для данного параметра указано.
...
Рейтинг: 0 / 0
Вызов ХП с параметром adDecimal
    #32430168
Фотография grinya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, ну тут я описался, само собой, что в ХП - то и в вызове ставится - 5.
Все равно ошибка.
Хотя я тут пока перешел на adVarChar, конверчу уже на MSSQL varchar в decimal(18,2) - все ОК. Думаю так и оставить.
...
Рейтинг: 0 / 0
Вызов ХП с параметром adDecimal
    #32430182
Alex_2003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Несоответствие типа adDecimal (это тип данных OLE DB = DBTYPE_DECIMAL) c провайдером MS SQL Server.
Тип Decimal в провайдере MS SQL Server соответствует типу данных для OLE DB провайдера (DBTYPE_NUMERIC).
Поэтому во всех строках в коде нужно использовать константу adNumeric вместо adDecimal .
...
Рейтинг: 0 / 0
Вызов ХП с параметром adDecimal
    #32430416
Фотография tpg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПодскажите, как тут правильно указать Precision, чтобы нормально все передавалось, плиз?

Чтобы не греть голову с размерностью, типами и т.п. параметров попробуй воспользоваться способностью объекта ADODB.Command самому определять всю эту шелуху самому. А именно,

Код: plaintext
Cmd.Parameters.Refresh


После этого достаточно представлять себе только порядок параметров, направленость (inp/out) и примерно тип.

Для задания входного параметра перед выполнением процедуры будет достаточно присвоить ему значение

Код: plaintext
1.
Cmd.Parameters( 1 ) = Val_1
Cmd.Parameters( 2 ) = Val_2


Для определения значения выходного параметра после выполнения процедуры, соответственно

Код: plaintext
1.
p3 = Cmd.Parameters( 3 ).Value
p4 = Cmd.Parameters( 4 ).Value


Следует иметь только в виду, что параметр под индексом ноль (Parameters(0)) - это значение возвращаемое оператором RETURN хранимой процедуры.
...
Рейтинг: 0 / 0
Вызов ХП с параметром adDecimal
    #32430712
Фотография grinya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо alex и tpg! Буду активно юзать.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Вызов ХП с параметром adDecimal
    #35360182
Moonstar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для VB получилось вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
	With Cmd.Parameters
	.Refresh
	.Item( 1 ).Value = Val_1
	.Item( 2 ).Value = Val_2
              ...
	End With
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вызов ХП с параметром adDecimal
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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