VBA SQL Select 语句连接

问题描述 投票:0回答:1

我有一个 Excel 工作表,其中包含今天日期 + 4 天前的下拉列表,当您选择一个日期时,我想显示该日期的集合,这些集合是另一个工作表上的日期时间,在我的

select
声明中,我想要将 dateBox 变量文本连接到
cptString
变量文本,并且仅显示该日期时间的集合。请在下面找到我遇到问题的代码。

Private Sub dateBox_Change()
    Dim connection As New ADODB.connection
    
    connection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
    ";Extended Properties=""Excel 12.0;HDR=YES;"";"
    
    Dim dateQuery As String
    Dim queryString As String
    Dim cptString1 As String
    Dim cptString2 As String
    Dim cptString3 As String
    
    dateQuery = Me.dateBox.Text
    
    cptString1 = "00:30"
    cptString2 = "01:30"
    cptString3 = "02:00"

    queryString = "Select [Lane],[Containerized Packages],[Staged Packages]," & _
    "[Loaded Packages],[Departed Packages],[Expected Packages],[All Packages] " & _
    "from [Data$] where " & 
    "[Lane] = 'SBS2->CC-RM-SWANSEA-GB-H2' or " & _
    "[Lane] = 'SBS2->CC-RM-Cardiff-GB-H2' or " & _
    "[Lane] = 'SBS2->CC-RM-Bristol2-GB-H2' " & _
    "and [CPTs] = dateQuery """ & cptString1 & """ "
    
    
    Dim rs As New ADODB.Recordset
    rs.Open queryString, connection
    
    Dim rSht As Worksheet
    Set rSht = ThisWorkbook.Worksheets("Sheet1")
    
    With rSht
        .Cells.ClearContents
        For i = 0 To rs.Fields.Count - 1
            .Cells(4, i + 1).Value = rs.Fields(i).Name
        Next i
        .Range("A5").CopyFromRecordset rs
    End With
    
    connection.Close
End Sub


sql excel vba adodb
1个回答
0
投票

这(将日期时间转换为数值)对我有用:

Private Sub dateBox_Change()
    Dim connection As New ADODB.connection, dttime
    
    connection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
                    ";Extended Properties=""Excel 12.0;HDR=YES;"";"
    
    Dim dateQuery As String
    Dim queryString As String
    Dim cptString1 As String
    Dim cptString2 As String
    Dim cptString3 As String
    
    'dateQuery = Me.dateBox.text
    
    cptString1 = "00:30"
    cptString2 = "01:30"
    cptString3 = "02:00"
    
    'create a numeric datetime value
    dttime = 1 * (DateValue("05/08/2024") + TimeValue(cptString1))

    queryString = "Select [Lane],[Containerized Packages],[Staged Packages]," & _
        " [Loaded Packages],[Departed Packages],[Expected Packages],[All Packages] " & _
        " from [Data$] where " & _
        " [Lane] in('SBS2->CC-RM-SWANSEA-GB-H2','SBS2->CC-RM-Cardiff-GB-H2','SBS2->CC-RM-Bristol2-GB-H2')" & _
        " and [CPTs]*1 = " & dttime  '*1 converts to numeric value
    
    Dim rs As New ADODB.Recordset
    rs.Open queryString, connection
    
    If Not rs.EOF Then
        'just print the forst matched Lane value
        Debug.Print rs("Lane").Value '>> SBS2->CC-RM-Cardiff-GB-H2
    Else
        Debug.Print "No hits"
    End If
    
    rs.Close
    connection.Close
    
End Sub

测试数据:

© www.soinside.com 2019 - 2024. All rights reserved.