Excel 1004向查询中添加列时出现ODBC常规错误

Excel 1004向查询中添加列时出现ODBC常规错误,excel,vba,amazon-redshift,Excel,Vba,Amazon Redshift,有效的原始查询 CSQL2 = CSql1 & vbNewLine & _ "SELECT CASE WHEN TRIM ( y.fbn ) LIKE '%ABC%' THEN ( bd.build_id ) ELSE TRIM ( y.fbn ) END AS fbn, y.number, y.title, y.owner, y.type, y.open_closed," & vbNewLine & _

有效的原始查询

CSQL2 = CSql1 & vbNewLine & _
          "SELECT CASE WHEN TRIM ( y.fbn ) LIKE '%ABC%' THEN ( bd.build_id ) ELSE TRIM ( y.fbn ) END AS fbn, y.number, y.title, y.owner, y.type, y.open_closed," & vbNewLine & _
          "y.date_approved, y.date_submitted_for_approval, y.expires_after, y.status, y.reg," & vbNewLine & _
          "y.site, y.lines, y.cap, y.committed, y.invoiced, CASE" & vbNewLine & _
          "WHEN y.Lines = 'Electrical' THEN 'Electrical_Equipment'" & vbNewLine & _
          "WHEN y.Lines = 'Mechanical' THEN 'Mechanical_Equipment'" & vbNewLine & _
          "WHEN y.Lines = 'Construction' THEN 'Base'" & vbNewLine & _
          "ELSE y.Lines END category, " & vbNewLine & _
          "CASE WHEN y.Lines = 'Electrical' THEN 'Other' " & vbNewLine & _
          "WHEN y.Lines = 'Mechanical' THEN 'Other' " & vbNewLine & _
          "WHEN y.Lines = 'Construction' THEN 'Base' ELSE y.Lines " & vbNewLine & _
          "END subcategory " & vbNewLine & _
          "FROM s1.line_new y LEFT JOIN (SELECT build_id, fbn FROM bd) bd ON bd.fbn = y.fbn " & vbNewLine & _
          "WHERE Lines <> 'NW' AND ( y.Cap <> 0 OR y.Committed <> 0 OR y.Invoiced <> 0 )" & vbNewLine & _
          "AND y.fbn IN ( SELECT DISTINCT fbn FROM bd )" & vbNewLine & _
          "AND y.number NOT IN (SELECT num FROM s1.att) AND" & vbNewLine & CARFilters
在此期间,LO存在,我不得不修改查询,添加了一些列;在添加列之前,此刷新一直有效。现在我得到了一个1004通用OBDC,但当我调试时,打印查询并按SQL客户机中的原样运行,它可以正常工作


我怎样才能知道是什么导致了1004?注-CSql1没有变化。

12个小时的工作时间,并且在赏金后不到一个小时;我发现了这个问题。有人删除了用户在检索结果所需的表上运行查询的权限。

Ah。顺便问一下,这不应该在存储过程中吗?如果您有某种指南,说明如何使用从VBA执行的存储过程将excel文件中的数据馈送到红移,因为这不是标准执行时间;很高兴看到它
CSql2 = CSql1 & vbNewLine & _
          "SELECT CASE WHEN TRIM ( bd.fbn ) LIKE '%ABC%' THEN ( bd.build_id ) ELSE TRIM ( bd.fbn ) END AS fbn, y.number, y.title, y.owner, y.type, y.open_closed," & vbNewLine & _
          "y.date_approved, y.date_submitted_for_approval, y.expires_after, y.status, y.reg," & vbNewLine & _
          "y.site, y.lines, ROUND(SUM(y.capex) OVER ( PARTITION BY y.fbn, lines ),2) AS cap, y.committed, y.invoiced, CASE" & vbNewLine & _
          "WHEN y.Lines = 'Electrical' THEN 'Electrical_Equipment'" & vbNewLine & _
          "WHEN y.Lines = 'Mechanical' THEN 'Mechanical_Equipment'" & vbNewLine & _
          "WHEN y.Lines = 'Construction' THEN 'Base'" & vbNewLine & _
          "ELSE y.Lines END category, " & vbNewLine & _
          "CASE WHEN y.Lines = 'Electrical' THEN 'Other' " & vbNewLine & _
          "WHEN y.Lines = 'Mechanical' THEN 'Other' " & vbNewLine & _
          "WHEN y.Lines = 'Construction' THEN 'Base' ELSE y.Car_Lines " & vbNewLine & _
          "END subcategory  ,mcl.currency_id mcl_currency ,fx_2.local_currency ,fx_2.conversion_rate 2_fx_rate " & vbNewLine & _
          ",mcl.exchange_rate_effective_date,ROUND(fx.rate,4) conversion_rate " & vbNewLine & _
          ",ROUND(SUM(y.cap*fx.rate) OVER ( PARTITION BY y.fbn, lines ),2) AS cap_local " & vbNewLine & _
          "FROM s1.mcl_carline_new y LEFT JOIN (SELECT build_id, fbn FROM bd) bd ON bd.fbn = y.fbn " & vbNewLine & _
          "LEFT JOIN (SELECT number, exchange_rate_effective_date, currency_id FROM s1.mcl_new) mcl ON y.number = mcl.number " & vbNewLine & _
          "LEFT JOIN s1.fx_rate_2 fx_2 ON fx_2.reg = y.reg " & vbNewLine & _
          "LEFT JOIN s2.prcmt_exchange_rate fx ON fx_2.local_currency = fx.to_currency_id " & vbNewLine & _
          "AND mcl.currency_id = fx.from_currency_id AND mcl.exchange_rate_effective_date = fx.effective_date " & vbNewLine & _
          "WHERE Lines <> 'NW' AND ( y.Cap <> 0 OR y.Committed <> 0 OR y.Invoiced <> 0 ) " & vbNewLine & _
          "AND y.fbn IN ( SELECT DISTINCT fbn FROM bd ) " & vbNewLine & _
          "AND y.number NOT IN (SELECT num FROM s1.att) AND " & vbNewLine & CARFilters
With CData.ListObjects.Add(SourceType:=0, Source:=CS, Destination:=CData.Range("$A$1")).QueryTable
        .CommandText = CSql2
        .RefreshStyle = xlInsertDeleteCells
        .AdjustColumnWidth = True
        .ListObject.DisplayName = "CData"
        .Refresh BackgroundQuery:=False
    End With