【问题标题】:Excel VB / SQL server:Excel VB/SQL 服务器:
【发布时间】:2020-07-11 04:39:08
【问题描述】:

所以我相信这应该很容易。

我有一个标准的 SQL 日期时间列,我想最好在过去 24 小时内获取所有条目,在 excel 中使用 vba,我将问题简化为“只是最后一个日历天”,以尝试更好地了解如何解决这个问题,无法弄清楚如何进行。

基本上:如果我在 sql 语句的“介于”部分手动输入日期,VBA 将接受,但不接受带有日期的变量。

围绕它“显示”vba 正在将声明为日期的字段格式化为 mm/dd/yyyy 而不是 sql 中标准日期时间列中的 yyyy/mm/dd,这可能是问题所在!我一直在玩转换命令,但无济于事。如果我手动输入正确格式化为变量值的日期,它确实有效。

代码如下:

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  "

【问题讨论】:

  • 这里不应该有逗号; Machine_Number, FROM

标签: sql sql-server excel vba date


【解决方案1】:

将 SQL 中的变量更改为字符串,并将其格式化为 YYYY-MM-DD。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2019-11-09
    • 2015-06-23
    相关资源
    最近更新 更多