2014-02-27 2 views
3

структура данных выглядит следующим образом:Неправильный порядок сортировки в списке полей

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] 

я получить ожидаемый результат для [1] в MySQL CLI:

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

И для запроса [2]:

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

Так моя проблема: Когда я открываю записей и привязать его к списку полей, порядок элементов перепутались. Подробно, набор данных с скобкой «[» помещается в верхнюю часть списка полей в форме MS-Access, но только когда я выполняю запрос [1].

Я получаю НЕ ожидаемый результат для [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) 

После того, как я поймал набор записей, я переопределяю набор записей t он список:

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

Дополнительная информация (1):

версия сервера: 5.6.16 MySQL Community Server (GPL)


Дополнительная информация (2):

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

Дополнительная информация (3): Так что я создал два отдельных запросов доступа и обжигают их. В представлении datasheet я получаю «результат смены»: для запроса [1] он сверху, для запроса [2] скобка находится внизу. Это связанная таблица MySQL с подключением ODBC. Я играл с некоторыми свойствами таблицы, но без эффекта.

Затем я создал фиктивную таблицу в самом доступе, заполнил таблицу некоторыми значениями, и результат был последовательным: оба раза отображались сверху. Поэтому, на мой взгляд, несоответствие должно основываться на том, что я использую связанную таблицу MySQL.

Я использую:

  • Microsoft Access 2013 (9.0.24172.951362)
  • ODBC-драйвер 32-Bit, MySQL ODBC Driver 5.2 Unicode
+0

Какую базу данных вы используете, mysql или доступ? –

+0

Обновление: см. Нижнюю часть сообщения. – kn0x

+2

Ваш образец вывода показывает, что два запроса Access несовместимы в их сортировке '[' сверху/снизу. Это действительно так? (Я не вижу этого в своих тестах.) Кроме того, что такое настройка сортировки в таблице MySQL? –

ответ

1

Я был в состоянии воссоздать свои результаты. Изменение поведения сортировки, по-видимому, связано с использованием функции IsNull(). При изменении запроса [1] для

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

то упорядочение соответствует для [1] как запрос и запрос [2] (и так же, как запросы MySQL).

Мое предположение заключается в том, что пересмотренный запрос является «простым» SQL и передается непосредственно драйверу ODBC, тогда как исходный запрос IsNull() требует, чтобы ACE/Jet Expression Service участвовала, и, следовательно, окончательная сортировка была такой, как Access обычно это делается для запросов против собственных таблиц ACE/Jet.

+0

Спасибо вам за все ваши усилия! – kn0x

Смежные вопросы