Поделиться через


Относительная и абсолютная прокрутка

Большинство параметров прокрутки в SQLFetchScroll позиционирует курсор относительно текущей позиции или абсолютной позиции. SQLFetchScroll поддерживает получение следующих, предыдущих, первых и последних наборов строк, а также относительное получение (получение набора строк n из начала текущего набора строк) и абсолютное получение набора строк (получение набора строк, начиная с строки n). Если n является отрицательным в абсолютном выборке, строки учитываются из конца результирующий набор. Таким образом, абсолютное получение строки -1 означает получение набора строк, начинающегося с последней строки в результирующем наборе.

Динамические курсоры определяют строки, вставленные в результирующий набор и удаленные из результирующий набор, поэтому для динамических курсоров нет простого способа получить строку по определенному числу, отличному от чтения из начала результирующий набор, что, скорее всего, будет медленно. Кроме того, абсолютное получение не очень полезно в динамических курсорах, так как номера строк изменяются по мере вставки и удаления строк; Таким образом, последовательное получение одного и того же номера строк может дать разные строки.

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

Операция полосы прокрутки Параметр прокрутки SQLFetchScroll
PAGE UP SQL_FETCH_PRIOR
PAGE DOWN SQL_FETCH_NEXT
На строку вверх SQL_FETCH_RELATIVE с FetchOffset равным -1
На строку вниз SQL_FETCH_RELATIVE с FetchOffset равным 1
Поле прокрутки в верхней части SQL_FETCH_FIRST
Поле прокрутки внизу SQL_FETCH_LAST
Случайное положение ползунка SQL_FETCH_ABSOLUTE

Такие приложения также должны разместить поле прокрутки после операции прокрутки, для которой требуется текущий номер строки и количество строк. Для текущего номера строки приложения могут отслеживать текущий номер строки или вызывать SQLGetStmtAttr с атрибутом SQL_ATTR_ROW_NUМБ ER, чтобы получить его.

Количество строк в курсоре, которое является размером результирующий набор, доступно в качестве поля SQL_DIAG_CURSOR_ROW_COUNT заголовка диагностики. Значение в этом поле определяется только после вызова SQLExecute, SQLExecDirect или SQLMoreResult . Это число может быть либо приблизительным, либо точным числом в зависимости от возможностей водителя. Поддержка драйвера может быть определена путем вызова SQLGetInfo с типами сведений о атрибутах курсора и проверка, возвращается ли SQL_CA2_CRC_APPROXIMATE или SQL_CA2_CRC_EXACT бит для типа курсора.

Точное число строк никогда не поддерживается для динамического курсора. Для других типов курсоров драйвер может поддерживать точные или приблизительные числа строк, но не оба. Если драйвер не поддерживает ни точные, ни приблизительные числа строк для определенного типа курсора, поле SQL_DIAG_CURSOR_ROW_COUNT содержит количество строк, которые были возвращены до сих пор. Независимо от того, что поддерживает драйвер, SQLFetchScroll с операцией SQL_FETCH_LAST приведет к тому, что поле SQL_DIAG_CURSOR_ROW_COUNT будет содержать точное число строк.