2016-02-10 3 views
0

Мне нужно вызвать хранимую процедуру из Excel, передав несколько значений, введенных пользователем в качестве параметров. Я почти достиг этого с помощью макроса, используя следующую команду Parameters.Использование CreateParameters с переменным размером параметра

Set ADOCmd = New ADODB.Command 

With ADOCmd 
     .Parameters.Append .CreateParameter("@Department", adChar, adParamInput, Len(cDept), cDept) 
     .Parameters.Append .CreateParameter("@title", adChar, adParamInput, Len(cTitle), cTitle) 
     .Parameters.Append .CreateParameter("@name", adChar, adParamInput, Len(cName), cName) 
     .Parameters.Append .CreateParameter("@email", adChar, adParamInput, Len(cEmail), cEmail) 
     .Parameters.Append .CreateParameter("@tel_no", adChar, adParamInput, Len(cTel), cTel) 
     .Parameters.Append .CreateParameter("@mob_no", adChar, adParamInput, Len(cMob), cMob) 
End With 

Это будет работать нормально, если все значения были заполнены пользователем. Однако, если что-то осталось пустым, возникает следующая ошибка.

Run-time error:'3708': 
Parameter object is improperly defined. Inconsistent or incomplete information was provided. 

Я убежден, что это связано с тем, что параметр Размер, переданный в функции CreateParameter, равен нулю. Есть ли способ обойти это? Должен ли он принимать ноль в качестве допустимого размера, если введенная строка равна нулю?

Заранее спасибо.

+1

Итак, столбцы в таблице являются char, а не varchar? –

+1

Длина должна быть максимальным размером для параметра, поэтому это длина параметра, объявленного в хранимой процедуре, а не длина передаваемой в нее строки. –

+1

Алекс К и Том Х, хороший крик, спасибо. Я уже пытался использовать максимальный размер для столбца, но затем он добавил пробелы в конец строк. Я изменил это на adVarChar и добавил максимальный размер столбца снова как Размер, и он удалил пробелы. Спасибо за помощь! – ryansin

ответ

1

Alex K и Том H помог мне здесь.

Я изменил тип на adVarChar и размер до максимального размера, разрешенного столбцом, который разрешил проблему.

0

вы можете сделать размер необязательным параметром в хранимой процедуре. Затем добавьте логику, чтобы изменить ее с нуля на 0. Если вы установите размер, он сохранит значение, которое вы передадите.

CREATE PROCEDURE usp_SQL_Procedure 
    @size INT = null, 

AS Begin 
--if @size comes over as null make it 0 
    set @size=ISNULL(@size,0) 
rest of you SP 

END

Смежные вопросы