为什么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?
我对这个问题最激烈地激动了小灰细胞,我们将非常感谢任何指导。
答案 0 :(得分:1)
我明白了,但我不知道为什么,也许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最为出色!小灰细胞现在处于和平状态。
Craigm