#excel #sql-server-2008 #parameter-passing
#excel #sql-server-2008 #передача параметров
Вопрос:
Я столкнулся с проблемой, связанной с параметрами даты, переданными в хранимую процедуру SQL Server из кода EXCEL VBA.
Хранимая процедура, принимающая два параметра даты @FromDate
и @ToDate
. Из Excel я хочу выполнить эту процедуру со значениями даты, взятыми из ячеек.
Проблема в том, что даты из ячеек в процедуру передаются в формате "dd/mm/yyyy"
независимо от любых изменений формата, которые я делаю в ячейке Excel. Принимая во внимание, что процедура SQL принимает форматы "yyyy-mm-dd"
или "yyyy-mon-dd"
или "yyyy/mm/dd"
или "dd-mon-yyyy"
.
Процедура выдает ошибку :
«Ошибка преобразования при преобразовании даты и / или времени из символьной строки» для дат, переданных из Excel (в формате «дд / мм / гггг»
Код vba, который я использовал, (ссылка https://www.mssqltips.com/sqlservert…to-sql-server /)
Private Sub CommandButton1_Click()
Dim FromDate As Date
Dim ToDate As Date
FromDate = Format(Sheets("Sheet1").Range("B1").Value, "yyyy-mm-dd") 'Pass value from cell B1 to SellStartDate variable
ToDate = Format(Sheets("Sheet1").Range("B2").Value, "yyyy-mm-dd") 'Pass value from cell B2 to SellEndDate variable
MsgBox FromDate
MsgBox ToDate
'Pass the Parameters values to the stored procedure used in the data connection
With ActiveWorkbook.Connections("TestConnection").OLEDBConnection
.CommandText = "EXEC dbo.spr_TestProcedure '" amp; FromDate amp; "','" amp; ToDate amp; "'"
ActiveWorkbook.Connections("TestConnection").Refresh
End With
End Sub.
Есть ли какой-либо способ передать даты в формате, который принимает процедура SQL Server? Если другого варианта нет, то мне придется выбрать вариант, чтобы ввести параметры моей процедуры в varchars и преобразовать их в date.
Ценю вашу помощь в этом!
Комментарии:
1. Для какой СУБД это нужно? Пожалуйста, добавьте тег, чтобы указать, используете ли вы
mysql
,postgresql
,sql-server
,oracle
илиdb2
— или что-то совсем другое.2. Объявите ваши
FromDate
ToDate
переменные и в VBA как строки. Вы хотите объединить строки с вашей SQL-строкой CommandText. ВFormat()
противном случае это излишне.3. @marc_s, я отредактировал свой вопрос, чтобы пометить базу данных, которая является sql server
4. @Ralph, какой бы формат я ни использовал в Excel для даты, VBA показывает (в msgbox) формат dd / mm / yyyy. Например, если я ввожу 2016-sep-25, msgbox отображает его как 25/09/2016. Текст команды создает код как «EXEC dbo.spr_TestProcedure ‘@FromDate’,’@ToDate'», который я вижу, когда вы щелкаете правой кнопкой мыши -> Таблица-> Редактировать запрос. .Refresh — это тот, который выполняет код.
5. @JNevill, да, это работает, когда я меняю FromDate и ToDate как строки. Спасибо, что указали опцию. Таким образом, запрос таблицы создается с использованием форматов дат, которые ожидает SQL. Хотя теперь я застрял в том, что запрос не выполняется, и, следовательно, данные не обновляются, за исключением кода «ActiveWorkbook. Соединения («TestConnection»). Обновить»
Ответ №1:
Вы можете передать дату в sp как char() и преобразовать ее в date .