Excel ADOB SQL 记录集,ORDER BY 适用于一个 xlsx 文件但不适用于其他文件?

Excel ADOB SQL Recordsets, ORDER BY works on one xlsx file but not on others?

为什么 ORDER BY 对某些 xlsx 文件起作用而对其他文件不起作用?

我构建 SQL 语句(使用 ADOB)以将数据从关闭的工作簿(我需要速度并希望使用 SQL 对数据进行排序)移动到我的活动工作簿中。下面是我使用的两个字符串,它们都非常适合它们的关联文件。

   mySQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "] ORDER BY " & TargetSortColumn & ";"   'This works for my data dictionary.

   mySQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "];"                                     'This works for the Cost File.

我找不到这两个文件之间的任何根本区别。我只是想将每个已关闭工作簿中的工作表复制到我当前的工作簿中,并使用 ORDER BY 对其进行排序。

在我的成本文件上使用 ORDER BY 时,我总是跳到我的错误陷阱。当我点击下面的第二条语句时,它触发了错误陷阱。

Set Con = CreateObject("ADODB.Connection")
Set Data = CreateObject("ADODB.Recordset")

我已经使用调试器进行了检查,并且传递到此过程中的参数对于每个文件都是正确的。我传入所有字符串并使用这些字符串构建 SQL 语句,因此那里没有不匹配。

我已经打开这两个文件并重新保存它们以确保它们不是文件的基本问题。我正在使用 Excel 2010.

两个文件中的工作表都将正确的名称正确传递到子例程中。

两个工作表都有从单元格 (1,1) 开始的数据。

请记住,两个 SQL 语句对各自的文件都能正常工作。

为什么我不能对某些文件使用 ORDER BY?

我已经在这个问题上给小灰细胞鼓动了最大的力量,不胜感激。

我明白了,但我不知道为什么,也许 NULL 单元格会使 ORDER BY 子句崩溃?

我添加了一个 WHERE 子句,删除了 code <> NULL 列的行,然后我可以毫无困难地使用 ORDER BY 代码子句。

mySQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "]
         WHERE code <> NULL
         ORDER BY code;

问题解决了。我不明白为什么 ORDER 在我使用 EMPTY 值的情况下不起作用。我只是希望它们位于排序顺序的顶部。

与 VBA 等效子句相比,WHERE 子句快得令人眼花缭乱。

无论如何,通过使用 WHERE 子句,SQL 效果最好!小小的灰色细胞现在平静了。

克雷格姆