Сервер Excel VB / SQL: - PullRequest
       3

Сервер Excel VB / SQL:

0 голосов
/ 30 марта 2020

Так что это должно быть легко, я уверен.

У меня есть стандартный столбец SQL datetime, я хочу получить все записи за последние 24 часа предпочтительно, используя vba в Excel, ive проблема сводилась к «только последним календарным дням», чтобы попытаться получить лучшее представление о том, как решить эту проблему, и не может понять, как действовать дальше.

в основном: VBA примет, если я вручную введу дату в часть между оператором sql, но не принимает переменную с датой.

Обыгрывая ее, «кажется», что vba форматирует поля, объявленные как даты в виде мм / дд / гггг гггг / мм / дд в стандартном столбце Datetime в sql, что, вероятно, является проблемой! Я играл с командой convert, но безрезультатно. Это работает, если я вручную ввожу даты, правильно отформатированные в значения переменных.

код ниже:

Dim DateVar As Date
Dim DateStart As Date
Dim DateEnd As Date
DateVar = Range("A2").Value
DateStart = DateVar - 1
DateEnd = DateVar + 1

   adoDbConn.Open **CONNECTION STRING GOES HERE**

selectCmd.ActiveConnection = adoDbConn
   selectCmd.CommandText = "SELECT DateTime, Machine_Number, FROM [33_TestImport] 
Where Machine_Number = " & Machvar & " 
AND DateTime BETWEEN " & DateVar & " AND " & DateEnd &  
ORDER By DateTime  "

1 Ответ

2 голосов
/ 30 марта 2020

Измените переменные в SQL на строки и отформатируйте их ГГГГ-ММ-ДД.

Sub Demo()

    Dim sConStr As String, myDb As Object, rs As Object
    Dim SQL As String, DateYMD As String, Machine As String

    sConStr = "-- connnection string --"

    DateYMD = Format(Range("A2").Value, "YYYY-MM-DD")
    Machine = 123

    SQL = " SELECT DateTime, Machine_Number FROM [33_TestImport]" & _
          " Where Machine_Number = " & Machine & _
          " AND DATEDIFF(minute,DateTime,'" & DateYMD & "') >= 0" & _
          " AND DATEDIFF(minute,DateTime,'" & DateYMD & "') < 1440" ' 24 hours

    Debug.Print SQL

    Set myDb = CreateObject("ADODB.Connection")
    myDb.Open sConStr

    Set rs = myDb.Execute(SQL)
    Range("A3").CopyFromRecordset rs

    myDb.Close

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...