字段列表中排序的顺序错误

时间:2014-02-27 14:45:08

标签: mysql sql vba ms-access

数据结构如下:

ID       | Name      |  CID
---------------------------------
1        | x         |  
2        | a         |  12
3        | a         |  12   
4        | c         |  
5        | x         |  
6        | [         |    

当我执行普通查询时

SELECT DISTINCT Name FROM table WHERE ISNull(CID_ID) ORDER BY Name;  [1]

SELECT DISTINCT Name FROM table ORDER BY Name; [2]

我在MySQL CLI中得到[1]的预期结果:

| Name      
------------
| c         
| x         
| [         

对于查询[2]:

| Name      
------------
| a        
| c         
| x         
| [     

所以我的问题是:当我打开记录集并将其绑定到字段列表时,项目的顺序混乱了。具体而言,括号值为“[”的数据集位于MS-Access表单中字段列表的顶部,但仅当我执行查询[1]时。

我得到 NOT [1]的预期结果:

| Name      
------------
| [   
| c         
| x         

对于查询[2]:

| Name      
------------
| a        
| c         
| x         
| [     

简化的VBA代码片段如下所示:

Dim dbs As DAO.Database
Dim rsSQL As DAO.Recordset
Dim strSQL As String

Set dbs = CurrentDb

strSQL = "SELECT DISTINCT Name FROM table WHERE ISNull(CID_ID) ORDER BY Name;"
Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

在我捕获记录集后,我覆盖了列表的记录集:

Set Me.ListNames.Recordset = oiManager.LoadDistinctName()

其他信息(1):

服务器版本:5.6.16 MySQL社区服务器(GPL)


其他信息(2):

| Name       | Engine | Version | Collation
| ########## | InnoDB |      10 | utf8_general_ci

其他信息(3): 所以我在访问中创建了两个单独的查询并将其解雇。在数据表视图中,我得到“交换结果”:对于查询[1],它位于顶部,对于查询[2],括号位于底部。它是一个带有ODBC连接的链接MySQL表。我玩了一些表属性但没有效果。

然后我在访问中创建了一个虚拟表,在表中填充了一些值,结果是一致的:两个时间显示在顶部。因此,在我看来,不一致必须基于我使用链接MySQL表这一事实。

我正在使用:

  • Microsoft Access 2013(9.0.24172.951362)
  • ODBC驱动程序32位,MySQL ODBC 5.2 Unicode驱动程序

1 个答案:

答案 0 :(得分:1)

我能够重新创建你的结果。排序行为的变化似乎与使用IsNull()函数有关。当我将查询[1]更改为

SELECT DISTINCT [Name] FROM [table] WHERE [CID_ID] IS NULL ORDER BY [Name];

然后查询[1]和查询[2]的排序是一致的(并且与MySQL查询相同)。

我的猜测是修改后的查询是“普通”SQL并直接传递给ODBC驱动程序,而原始IsNull()查询需要ACE / Jet表达服务参与,因此最终的排序是Access通常用于查询本机ACE / Jet表的方式。

相关问题