excel - 将列添加到查询时出现 1004 ODBC 常规错误
问题描述
有效的原始查询
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
无法刷新列表对象的新查询:
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
Listobject 刷新部分
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
在此 LO 存在期间,我不得不修改查询,添加了一些列;在添加列之前,此刷新一直有效。现在我得到一个 1004 通用 OBDC,但是当我 Debug.Print
在我的 SQL 客户端中查询并按原样运行它时,它可以正常工作。
我怎样才能知道是什么导致了 1004?注意 - CSql1 没有改变。
解决方案
12 小时的工作时间和赏金后不到一个小时;我发现问题。有人删除了在检索结果所需的表上运行查询的用户的权限。
推荐阅读
- mysql - MySQL 查询:如何在 Django 中编写?
- scala - 如何将参数传递给scala中的方法
- prometheus - Prometheus Docker 无法以`Template: (dynamic): parse: template: :10: undefined variable "$labels"` 开始
- gradle - Gradle:如何为发行版插件创建的 ZIP 文件生成 sha-256 哈希?
- c# - 如何获取可能为空的数据库字段的长度
- c# - 从纹理图集中在四边形网格中应用纹理
- javascript - react-select 中的“defaultValue”不选择下拉菜单中的选项,但“value”选择下拉菜单中的选项
- gremlin - 在 Gremlin 中,如何查询一个属性值大于另一个属性值的顶点?
- ruby - 如何使用 Ruby 在 DynamoDB 中添加字符串集
- python - 具有自定义矩阵乘法的 tf.keras 自定义密集层没有梯度