VBA SQL 查询显示在错误的列中

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

我有一个名为

DoubleBookings
的子例程,它查询另外 2 个 Excel 工作表并将查询输出到 DoubleBookings 工作表。目前它正在选择正确的信息,但在纸张的另一面上输出一半的信息?一切都工作正常,直到我添加标题。其他 4 张工作正常,但由于此
select
声明是
INNER JOIN
,因此会导致下图所示的问题。

Sub FindDoubleBookings()
    Dim conn As New ADODB.connection
    Dim rng As Excel.Range
    
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
    ";Extended Properties=""Excel 12.0;HDR=YES;"";"
    
    Dim doubleQuery As String
    
    With Sheets("Inbounds")        
        Dim dataRef As String
        dataRef = Intersect(.UsedRange, .Range("8:" & .Rows.Count)).Address(0, 0)
        
        doubleQuery = "Select [vrid],[route],[schedule_date],[vehicle_carrier],[carrier_name],[orig_planned_yard_checkin_time],[orig_planned_yard_checkout_time],[dest_node]from [Inbounds$" & dataRef & "] AS Delivery INNER JOIN [Outbounds$" & dataRef & "] AS Collection on Delivery.actual_vehicle = Collection.actual_vehicle where Delivery.[orig_planned_yard_checkin_time] <= Collection.[orig_planned_yard_checkout_time] order by [Delivery.Route]"
    End With
    
    Dim drs As New ADODB.Recordset
    drs.Open doubleQuery, conn
    
    Dim wSht As Worksheet
    Set wSht = ThisWorkbook.Worksheets("DoubleBookings")
    
    With wSht
        .Cells.clearContents
        For i = 0 To drs.Fields.Count - 1
            .Cells(8, i + 1).Value = drs.Fields(i).Name
        Next i
        .Range("A9").CopyFromRecordset drs
    End With
    
    ThisWorkbook.Sheets("DoubleBookings").Activate
    conn.Close
End Sub

sql excel vba ado
1个回答
0
投票

Select
语句更改为以下内容,效果很好。

感谢您的帮助。

 doubleQuery = "Select Delivery.[vrid],Delivery.[route],Delivery.[Schedule_date],Delivery.[vehicle_carrier],Delivery.[carrier_name],Delivery.[actual_vehicle],Delivery.[dest_planned_yard_checkin_time],Delivery.[dest_planned_yard_checkout_time]," & _
                          "Collection.[vrid],Collection.[route],Collection.[Schedule_date],Collection.[vehicle_carrier],Collection.[carrier_name],Collection.[actual_vehicle],Collection.[orig_planned_yard_checkin_time],Collection.[orig_planned_yard_checkout_time],Collection.[dest_node] from [Inbounds$" & dataRef & "] AS Delivery INNER JOIN [Outbounds$" & dataRef & "] AS Collection on Delivery.actual_vehicle = Collection.actual_vehicle where Delivery.[dest_planned_yard_checkin_time] >= Collection.[orig_planned_yard_checkout_time] order by [Delivery.Route]"
© www.soinside.com 2019 - 2024. All rights reserved.