【问题标题】:ADODB recordset SQL returns error in Excel VBAADODB 记录集 SQL 在 Excel VBA 中返回错误
【发布时间】:2017-09-25 16:25:39
【问题描述】:

当我到达尝试打开记录集的语句时,以下代码会产生错误(对象“_Recordset”的“打开”方法失败):

Set objClubSalesSourceConn = CreateObject("ADODB.COnnection")
objClubSalesSourceConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & strDirectory & ";" & _
          "Extended Properties=""text;HDR=YES;FMT=Delimited"""
Set rsClubOrders = CreateObject("ADODB.Recordset")

strSQL = "SELECT"
strSQL = strSQL & vbCrLf & "    ClubSales.[Order Number] AS OrderNum,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Submitted Date] AS SaleDate,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Product SKU] AS SKU,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Product Name] AS ItemDesc,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Ext Item Price] AS SaleAmt,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Ext Item Shipping] AS ShipAmt,"
strSQL = strSQL & vbCrLf & "    CASE WHEN ISNULL(ClubSales.[Ship Date])"
strSQL = strSQL & vbCrLf & "        THEN 1"
strSQL = strSQL & vbCrLf & "        ELSE 0 END AS ShipDateNull,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Ship Date] AS ShipDate,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Pickup Date] AS PickupDate,"
strSQL = strSQL & vbCrLf & "    ClubSales.[Quantity Sold] * ClubSales.[Cost Of Goods] AS COGSAmt"
strSQL = strSQL & vbCrLf & "FROM"
strSQL = strSQL & vbCrLf & "    ClubSalesSource.csv AS ClubSales"

rsClubOrders.Open strSQL, objClubSalesSourceConn, adOpenDynamic*

问题在于SQL中的CASE WHEN语句。如果我将其省略,则记录集可以正常打开。我在 Excel VBA 中,查询 csv 文件。我需要知道如何解决这个问题。我也没有成功地尝试使用 IIF 函数,就像我在 Access 中所做的那样。

【问题讨论】:

  • IIF(isnull(x),true,false) ?
  • 是的,虽然现在我尝试它可以工作。感谢您的评论。
  • Jet/ACE 不支持CASE 语句。向我们展示失败的IIF

标签: sql vba csv ado


【解决方案1】:
strSQL = "SELECT" & _
"    ClubSales.[Order Number] AS OrderNum," & _
"    ClubSales.[Submitted Date] AS SaleDate," & _
"    ClubSales.[Product SKU] AS SKU," & _
"    ClubSales.[Product Name] AS ItemDesc," & _
"    ClubSales.[Ext Item Price] AS SaleAmt," & _
"    ClubSales.[Ext Item Shipping] AS ShipAmt," & _
"    CASE WHEN ISNULL(ClubSales.[Ship Date])" & _
"        THEN 1" & _
"        ELSE 0 END AS ShipDateNull," & _
"    ClubSales.[Ship Date] AS ShipDate," & _
"    ClubSales.[Pickup Date] AS PickupDate," & _
"    ClubSales.[Quantity Sold] * ClubSales.[Cost Of Goods] AS COGSAmt"  & _
" FROM" & _
"    ClubSalesSource.csv AS ClubSales"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多