已经对这个问题进行了几周的故障排除,到目前为止,没有任何解决方案有效。我尝试了很多解决方案,包括:
在我的情况下,奇怪的是,在计算机1上运行相同版本的Excel并使用相同版本的ODBC驱动程序的两台计算机上,所有查询都工作,而在计算机2上,它会产生运行时错误。问题是,计算机1很快就会消失,所以我需要让计算机2工作。
另一件非常奇怪的事情是计算机2在同一子程序中成功连接和检索信息!因此查询1有效但查询2给出了运行时错误。
在同一个Excel文件中的计算机2上运行,这里是查询1:
SELECT COUNT(ADM_APP_INFO.APP_NUM)
FROM
SCHEMA.TABLE TABLE
WHERE (TABLE.QUEUE = 'QNAME' AND TABLE.PARAM = 'D'
AND TABLE.DATE_ENT >= '1/1/2016')
工作和拉取信息。查询2具有非零计数:
SELECT DISTINCT COUNT(ACCT_NUM) FROM SCHEMA.DAILY_RUN WHERE DAILY_RUN.ACCT_NUM_FLAG = 0 FETCH FIRST 10 ROWS ONLY
但是当查询2没有WHERE子句时,确实在计算机2上工作。这两个查询都在计算机1上工作,但带有WHERE子句的查询2在计算机2上产生错误。
我甚至将计算机1上的工作Excel文件复制到计算机2并仅在计算机2上获取错误。这些点表明没有任何建议?
作为参考,这是我正在使用的With块:
With Worksheets("Template").QueryTables.Add(Connection:="ODBC;DSN=Connect32;UID=UserName;;HOST=111.111.11.111;PORT=xxxx;SUBSYS=xxxx;DBTY=DB2;PLAN=xxxx ", _
Destination:=Range("D5"))
.CommandText = Range("Query!A1:A1").Value
'.Name = "Query from MS Access Database"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlOverwriteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
答案 0 :(得分:0)
好的,所以看起来我有一个生日礼物,因为我的一位同事能够解决这个问题。
原来我的ODBC驱动程序,正如你们有些人可能怀疑的那样,在两个系统上都没有完全相同的配置方式。在我的例子中,我需要在高级选项卡下的AlternateID设置下添加数据库名称。
如果没有这一步,即使完全限定查询中的表名也无济于事。希望这有助于其他人面对这个看似奇怪的问题!