【问题标题】:Wrong order of sorting in field list字段列表中的排序顺序错误
【发布时间】:2014-02-27 14:45:07
【问题描述】:

数据结构如下:

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]。

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

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

对于查询 [2]:

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

简化的 VBA 代码 sn-p 如下所示:

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 表。我玩弄了一些表格属性,但没有任何效果。

然后我在 access 本身中创建了一个虚拟表,用一些值填充表,结果是一致的:两次都显示在顶部。所以在我看来,不一致必须基于我正在使用链接的 MySQL 表这一事实。

我正在使用:

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

【问题讨论】:

  • 你用的是什么数据库,mysql还是access?
  • 更新:见帖子底部。
  • 您的示例输出显示两个 Access 查询在将 [ 排序到顶部/底部时不一致。真的是这样吗? (我在测试中没有看到。)另外,MySQL 表的排序规则设置是什么?
  • 是的,这是排序顺序不一致,我无法解决。有关更多信息,请查看更新版本。谢谢你!
  • 好的,请检查一下,因为当我从 Access 中运行这两个查询时,[ 始终出现在顶部(即,对于 both 查询 [1] 和查询[2])。如果您也是这种情况,那么请编辑您问题中的示例结果以反映这一点。 (MySQL 和 Access 之间的行为差​​异是一回事,而 Access 的 inconsistent 行为是不同的。)

标签: mysql sql vba ms-access


【解决方案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 表进行查询。

【讨论】:

  • 感谢您的所有努力!
猜你喜欢
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多