[SQL] 어떻게 MS 액세스를 위해 SQL의 페이지 매김을 구현합니까?
SQL어떻게 MS 액세스를 위해 SQL의 페이지 매김을 구현합니까?
나는 매우 느리게 불구하고 아주 잘 작동 OdbcConnection 클래스를 통해 ASP.NET을 사용하여 Microsoft 액세스 2002 데이터베이스 (MDB)에 액세스하고 있습니다.
내 질문은 내가으로 TOP 절을 구현할 수 있습니다 아는 한,이 데이터베이스에 쿼리를 SQL에 페이지 매김을 구현하는 방법에 관한 것입니다 :
SELECT TOP 15 *
FROM table
하지만 SQL 서버가 ROWNUMBER를 사용하여 수행 할 수 있습니다으로 오프셋이를 제한 할 수있는 방법을 찾을 수 없습니다입니다. 내 최고의 시도했다 :
SELECT ClientCode,
(SELECT COUNT(c2.ClientCode)
FROM tblClient AS c2
WHERE c2.ClientCode <= c1.ClientCode)
AS rownumber
FROM tblClient AS c1
WHERE rownumber BETWEEN 0 AND 15
있는 실패
이 오류를 해결할 수는 없지만, 나는 그것이 ROWNUMBER을 결정하는 하위 쿼리를 함께 할 수있는 뭔가가 있으리라 믿고있어?
어떤 도움이 함께 감상 할 수있다; 구글 내 검색이 도움이되지 않는 결과를 산출했다 :(
해결법
-
==============================
1.당신은 MS Access에서 페이징을 적용 할 경우에 사용
당신은 MS Access에서 페이징을 적용 할 경우에 사용
SELECT * FROM ( SELECT Top 5 sub.ClientCode FROM ( SELECT TOP 15 tblClient.ClientCode FROM tblClient ORDER BY tblClient.ClientCode ) sub ORDER BY sub.ClientCode DESC ) subOrdered ORDER BY subOrdered.ClientCode
StartPos + 페이지 크기는 어디 (15), 그리고 5는 페이지 크기이다.
주석을 편집 :
쿼리, 즉 ROWNUMBER 동일한 수준의 열 이름 할당을 참조하려고하기 때문에 당신이 받고있는 오류입니다. 당신은 당신의 쿼리를 변경한다면 :
SELECT * FROM ( SELECT ClientCode, (SELECT COUNT(c2.ClientCode) FROM tblClient AS c2 WHERE c2.ClientCode <= c1.ClientCode) AS rownumber FROM tblClient AS c1 ) WHERE rownumber BETWEEN 0 AND 15
그것은 당신에게 오류를 제공하지해야하지만, 나는이 원하는 페이징 결과라고 생각 해달라고.
-
==============================
2.원래 대답을 astander의 답변을 볼 수 있지만, 여기에 몇 가지 ODBC 파서 규칙 (처음 15 개 레코드 (30)을 건너 뛰는 후) 고려 내 최종 구현입니다 :
원래 대답을 astander의 답변을 볼 수 있지만, 여기에 몇 가지 ODBC 파서 규칙 (처음 15 개 레코드 (30)을 건너 뛰는 후) 고려 내 최종 구현입니다 :
SELECT * FROM ( SELECT Top 15 -- = PageSize * FROM ( SELECT TOP 45 -- = StartPos + PageSize * FROM tblClient ORDER BY Client ) AS sub1 ORDER BY sub1.Client DESC ) AS clients ORDER BY Client
여기의 차이는 클라이언트 이름으로 분류 할 때 나는 일에 페이지 매김을해야하고, 내가 모든 열 필요 (물론, 실제로는 단지 일부를,하지만 난 종류의 그 가장 바깥 쪽 쿼리 아웃)이다.
-
==============================
3.나는 Access에서 페이지 매김을 구현하기 위해 SQL 코드를 사용
나는 Access에서 페이지 매김을 구현하기 위해 SQL 코드를 사용
선택 TOP Row_Per_Page *에서 TOP (TotRows 선택 - ((PAGE_NUMBER - 1) * Row_Per_Page) sampletable는 주문의 ColumnName DESC에서 ] 주문의 ColumnName ASC
나는 스크린 샷과 기사를 게재했습니다 내 블로그에
-
==============================
4.이를 위해 OleDbDataAdapter 데이터 테이블 및 클래스를 이용하여 페이징의 단순한 방법이다. 나는 단순함에 대해 다른 SQL 명령을 사용하고 있습니다.
이를 위해 OleDbDataAdapter 데이터 테이블 및 클래스를 이용하여 페이징의 단순한 방법이다. 나는 단순함에 대해 다른 SQL 명령을 사용하고 있습니다.
Dim sSQL As String = "select Name, Id from Customer order by Id" Dim pageNumber As Integer = 1 Dim nTop As Integer = 20 Dim nSkip As Integer = 0 Dim bContinue As Boolean = True Dim dtData as new Datatable Do While bContinue dtData = GetData(sSQL, nTop, nSkip, ConnectionString) nSkip = pageNumber * nTop pageNumber = pageNumber + 1 bContinue = dtData.Rows.Count > 0 If bContinue Then For Each dr As DataRow In dtData.Rows 'do your work here Next End If Loop
여기에 GetData의 기능이다.
Private Function GetData(ByVal sql As String, ByVal RecordsToFetch As Integer, ByVal StartFrom As Integer, ByVal BackEndTableConnection As String) As DataTable Dim dtResult As New DataTable Try Using conn As New OleDb.OleDbConnection(BackEndTableConnection) conn.Open() Using cmd As New OleDb.OleDbCommand cmd.Connection = conn cmd.CommandText = sql Using da As New OleDb.OleDbDataAdapter(cmd) If RecordsToFetch > 0 Then da.Fill(StartFrom, RecordsToFetch, dtResult) Else da.Fill(dtResult) End If End Using End Using End Using Catch ex As Exception End Try Return dtResult End Function
위의 코드는 테이블 고객에서 루프가 파일의 끝 부분까지 조작 할 때마다 10 개 행을 반환합니다.
-
==============================
5.사용 제한 또는 GET 매김 한 가지 쉬운 방법은 액세스에서 작업하는 것은 동일한 구문 많은 데시벨에 대한 지원 매김 ADODB 라이브러리를 사용하는 것입니다. http://phplens.com/lens/adodb/docs-adodb.htm#ex8 그것 쉽게 수정할 / 재정의 호출기 클래스는 배열 형식의 행 필요한 수를 가져올 수 있습니다.
사용 제한 또는 GET 매김 한 가지 쉬운 방법은 액세스에서 작업하는 것은 동일한 구문 많은 데시벨에 대한 지원 매김 ADODB 라이브러리를 사용하는 것입니다. http://phplens.com/lens/adodb/docs-adodb.htm#ex8 그것 쉽게 수정할 / 재정의 호출기 클래스는 배열 형식의 행 필요한 수를 가져올 수 있습니다.
-
==============================
6.
SELECT * FROM BS_FOTOS AS TBL1 WHERE ((((select COUNT(ID) AS DD FROM BS_FOTOS AS TBL2 WHERE TBL2.ID<=TBL1.ID)) BETWEEN 10 AND 15 ));
그 결과 10 ~ 15 만 기록.
from https://stackoverflow.com/questions/1900635/how-do-i-implement-pagination-in-sql-for-ms-access by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] CTE 오류 : "유형 앵커 및 재귀 부분 사이에 일치하지 않습니다" (0) | 2020.05.11 |
---|---|
[SQL] 오류 메시지 : (공급자 : 공유 메모리 공급자 오류 : 0 - 없음 파이프의 다른 끝에 프로세스가에 있습니다.) (0) | 2020.05.11 |
[SQL] 자바 스크립트에서 SQL LIKE 에뮬레이션 (0) | 2020.05.11 |
[SQL] 어떻게 T-SQL에서 문자열에서 확장 ASCII 문자를 제거하는 방법은 무엇입니까? (0) | 2020.05.11 |
[SQL] MySQL은 두 날짜 사이의 개월의 목록을 얻는 방법 (0) | 2020.05.11 |