상대 및 절대 스크롤
SQLFetchScroll의 대부분의 스크롤 옵션은 현재 위치 또는 절대 위치를 기준으로 커서의 위치를 지정합니다. SQLFetchScroll 은 다음, 이전, 첫 번째 및 마지막 행 집합뿐만 아니라 상대 페치(현재 행 집합의 시작 부분에서 행 집합 n 개 행 가져오기) 및 절대 페치(행 n부터 행 집합 가져오기)를 페치할 수 있습니다. n이 절대 인출에서 음수이면 결과 집합의 끝에서 행이 계산됩니다. 따라서 행 -1의 절대 인출은 결과 집합의 마지막 행으로 시작하는 행 집합을 페치하는 것을 의미합니다.
동적 커서는 결과 집합에 삽입되어 삭제된 행을 검색하므로 동적 커서가 결과 집합의 시작 부분부터 읽는 것 외에는 특정 숫자로 행을 검색하는 쉬운 방법이 없으므로 속도가 느려질 수 있습니다. 또한 행이 삽입되고 삭제될 때 행 번호가 변경되기 때문에 동적 커서에서 절대 가져오기는 그리 유용하지 않습니다. 따라서 동일한 행 번호를 연속적으로 페치하면 다른 행을 생성할 수 있습니다.
보고서와 같은 블록 커서 기능에만 SQLFetchScroll을 사용하는 애플리케이션은 다음 행 집합을 페치하는 옵션만 사용하여 결과 집합을 한 번만 통과할 수 있습니다. 반면에 화면 기반 애플리케이션은 SQLFetchScroll의 모든 기능을 활용할 수 있습니다. 애플리케이션이 행 집합 크기를 화면에 표시되는 행 수로 설정하고 화면 버퍼를 결과 집합에 바인딩하는 경우 스크롤 막대 작업을 SQLFetchScroll 호출로 직접 변환할 수 있습니다.
스크롤 막대 작업 | SQLFetchScroll 스크롤 옵션 |
---|---|
페이지 위로 | SQL_FETCH_PRIOR |
페이지 아래로 | SQL_FETCH_NEXT |
줄 위로 | FetchOffset이 -1인 SQL_FETCH_RELATIVE |
줄 아래로 | FetchOffset이 1과 같은 SQL_FETCH_RELATIVE |
맨 위에 있는 스크롤 상자 | SQL_FETCH_FIRST |
아래쪽 스크롤 상자 | SQL_FETCH_LAST |
임의 스크롤 상자 위치 | SQL_FETCH_ABSOLUTE |
또한 이러한 애플리케이션은 스크롤 작업 후 스크롤 상자의 위치를 지정해야 합니다. 이 경우 현재 행 번호와 행 수가 필요합니다. 현재 행 번호의 경우 애플리케이션은 현재 행 번호를 추적하거나 SQL_ATTR_ROW_NUMBER 특성을 사용하여 SQLGetStmtAttr을 호출하여 검색할 수 있습니다.
결과 집합의 크기인 커서의 행 수는 진단 헤더의 SQL_DIAG_CURSOR_ROW_COUNT 필드로 사용할 수 있습니다. 이 필드의 값은 SQLExecute, SQLExecDirect 또는 SQLMoreResult가 호출된 후에만 정의됩니다. 이 개수는 드라이버의 기능에 따라 대략적인 개수 또는 정확한 개수일 수 있습니다. 드라이버의 지원은 커서 특성 정보 형식을 사용하여 SQLGetInfo를 호출하고 커서 형식에 대해 SQL_CA2_CRC_APPROXIMATE 또는 SQL_CA2_CRC_EXACT 비트가 반환되는지 여부를 검사 확인할 수 있습니다.
정확한 행 수는 동적 커서에 대해 지원되지 않습니다. 다른 유형의 커서의 경우 드라이버는 정확히 또는 대략적인 행 수를 지원할 수 있지만 둘 다 지원할 수는 없습니다. 드라이버가 특정 커서 형식에 대한 정확한 행 개수와 대략적인 행 수를 지원하지 않는 경우 SQL_DIAG_CURSOR_ROW_COUNT 필드에는 지금까지 가져온 행 수가 포함됩니다. 드라이버가 지원하는 항목에 관계없이 SQL_FETCH_LAST 연산이 있는 SQLFetchScroll은 SQL_DIAG_CURSOR_ROW_COUNT 필드에 정확한 행 수를 포함하게 됩니다.