2014-02-27 5 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의 커뮤니티 서버 (GPL)


추가 정보 (2) :

012 3,516,
| Name  | Engine | Version | Collation 
| ########## | InnoDB |  10 | utf8_general_ci 

추가 정보는 (3) : 그래서 나는 액세스에 두 개의 분리 된 쿼리를 생성하고 그들을 해고. 데이터 시트보기에서 나는 "스왑 된 결과"를 얻습니다. 쿼리 [1]의 경우 맨 위, 쿼리 [2]의 경우 맨 아래에 괄호가 있습니다. 그것은 ODBC 연결과 연결된 MySQL 테이블입니다. 나는 테이블 속성 중 일부를 가지고 놀았지만 효과가 없었다.

그런 다음 액세스 자체에 더미 테이블을 만들고 테이블에 값을 채우면 결과는 일관 적입니다. 두 시간 모두 맨 위에 표시됩니다. 그래서 제 의견으로는, 불일치는 연결된 MySQL 테이블을 사용하고 있다는 사실에 근거해야합니다.

내가 사용하고 있습니다 :

  • 마이크로 소프트 액세스 2013 (9.0.24172합니다.951362)
  • ODBC - 드라이버 32 비트, 당신의 결과를 재현 할 수 있었다
+0

mysql 또는 액세스를 사용중인 데이터베이스는 무엇입니까? –

+0

업데이트 : 게시물 하단을 참조하십시오. – kn0x

+2

샘플 출력 결과 두 개의 Access 쿼리가 위/아래 정렬에서 [[]에 일관성이 없음을 보여줍니다. 그게 사실인가요? (필자의 테스트에서는이를 볼 수 없습니다.) 또한 MySQL 테이블의 데이터 정렬 설정은 무엇입니까? –

답변

1

MySQL의 ODBC 5.2 유니 코드 드라이버. 정렬 동작의 변경은 IsNull() 기능을 사용하는 것과 관련이있는 것으로 보입니다. 내가

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

에 쿼리 [1]을 변경하면 다음 순서는 [2] (그리고 MySQL의 쿼리와 동일) 두 쿼리 [1] 및 쿼리 일치한다.

내 생각에 수정 된 쿼리는 "일반"SQL이고 직접 ODBC 드라이버에 전달되지만 원래 IsNull() 쿼리는 ACE/Jet 식 서비스가 필요하다는 결론을 얻었습니다. 따라서 최종 정렬은 Access 일반적으로 기본 ACE/Jet 테이블에 대한 쿼리에 사용됩니다.

+0

모든 노력에 감사드립니다! – kn0x