VBA передает параметры даты в хранимую процедуру SQL Server

#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 .