【发布时间】:2018-12-04 15:45:23
【问题描述】:
对如何重构这个简单的查询有什么建议吗?
通过 VB6 使用 DAO 访问 SQL Server 数据库(更新旧代码以使用新数据库),不知何故,其中一个应用程序中的此查询很适合。
Select I.sType, Count(I.BarcodeID) AS CountOfID
FROM (SELECT DISTINCT sType, BarcodeID From [Ready]) as I
GROUP BY I.sType
ORDER BY sType
我已将查询粘贴到 SQL 企业管理器中,它按预期运行得很好。击中原始 Access DB 效果很好。但不知何故,通过 ODBC 访问 SQL Server 的 DAO 正在生成:
“Microsoft Jet 数据库引擎找不到输入表或查询”
我尝试过的事情:
- 删除 ()
- 删除“as I”和“I”。符号。
- [Ready] 周围的括号和没有(认为它可能被保留) 关键字)。
- 确认连接到 ODBC for Sql Server(此连接也用于其他查询。
检查了 SQL 分析工具并且查询正在发送到服务器(已编辑,我在 SQL Express 上检查了错误的工具)
编辑:为了满足大家的担心,我并没有真正使用 SQL Server,我将 SQL 命令编辑为更简单的
SELECT DISTINCT sType, BarcodeID From [Ready]
而且在同一个连接上也能正常工作,所以连接100%确认是SQL Server,报错信息有误(报“Access”)。
所以问题毫无疑问是来自查询的查询。
更新:
确实证实了我的怀疑,即查询,尽管是正常的,但不能与 ADO-> ODBC-> Sql Server 一起使用。
SQL 所做的第一步是尝试验证“来自”表(在本例中不是表,而是查询本身)的列等。
当我运行基本的SELECT DISTINCT sType, BarcodeID From [Ready] SQL 时,会检查名为“Ready”(exec sp_special_columns N'Ready',NULL,NULL,N'V',N'T',N'U') 的表的列、键、索引等,然后继续返回结果。
当我使用子查询时,SQL 对表 def 执行相同的检查,但对于名为 SELECT DISTINCT sType, BarcodeID From [Ready] 的 表,它当然不存在并且返回错误 (exec sp_special_columns N'SELECT DISTINCT sType, BarcodeID From [Ready]',NULL,NULL,N'V',N'T',N'U' )。 VB6/ADO 正确报告 SQL 说找不到表。显然,来自查询的这个查询阻碍了 ADO->ODBC...
【问题讨论】:
-
您确定您访问的是正确的数据库吗? “Microsoft Jet”建议使用 Access,而不是 SQL Server
-
@Diado -- 很好的建议,是的。我应该补充说我也检查过。该连接显然是到我的 SQL Server 的 ODBC 连接。但你是对的,这条消息让我立即确认没有 Access 仍在播放。事实上,Access MDB 所在的“文件夹”已被重命名,因此它不可能找到它们。 :(
-
考虑到 OP 声明 “已检查 SQL Profiler 并且查询甚至没有发送到服务器” @Diado 我认为这也几乎证实了问题. JET 不能用于连接 SQL Server,它用于连接 2007 之前的 Office 文件(如 Access 和 Excel 文件)。 2010+ 使用 ACE,而 SQl Server 使用 ODBC。错误说明 JET 的事实清楚地表明没有使用正确的驱动程序。我建议 OP 分享他们的代码,因为这里的 SQL 语句不是问题。
-
@Lamu -- 见上面的回复。绝对在正确的连接上,所以它是 SQL。
-
@klkitchens 你能分享你用来连接数据库的代码吗?
标签: sql-server vb6 odbc dao