Что такое курсор?
Область применения: Access 2013, Office 2013
Операции в реляционной базе данных действуют на полный набор строк. Набор строк, возвращаемых инструкцией SELECT, состоит из всех строк, соответствующих условиям в предложении WHERE инструкции . Этот полный набор строк, возвращаемых инструкцией, называется результирующий набор. Приложения, особенно интерактивные и интерактивные, не всегда могут эффективно работать со всем результирующий набор как единое целое. Эти приложения нуждаются в механизме для работы с одной строкой или небольшим блоком строк за раз. Курсоры — это расширение для результирующих наборов, которые обеспечивают этот механизм.
Курсор реализуется библиотекой курсоров. Библиотека курсоров — это программное обеспечение, которое часто реализуется как часть системы базы данных или API доступа к данным, который используется для управления атрибутами данных, возвращаемыми из источника данных (результирующий набор). Эти атрибуты включают управление параллелизмом, позицию в результирующем наборе, количество возвращаемых строк и возможность перемещения вперед и (или) назад через результирующий набор (возможность прокрутки).
Курсор отслеживает позицию в результирующем наборе и позволяет выполнять несколько операций по строке с результирующий набором с возвратом к исходной таблице или без нее. Другими словами, курсоры концептуально возвращают результирующий набор на основе таблиц в базах данных. Курсор называется так, так как он указывает текущую позицию в результирующем наборе так же, как курсор на экране компьютера указывает текущую позицию.
Важно ознакомиться с концепцией курсоров, прежде чем переходить к изучению особенностей их использования в ADO.
С помощью курсоров можно:
Укажите положение в определенных строках в результирующем наборе.
Получение одной строки или блока строк на основе текущей позиции результирующих наборов.
Измените данные в строках в текущей позиции в результирующем наборе.
Определите различные уровни конфиденциальности к изменениям данных, внесенным другими пользователями.
Например, рассмотрим приложение, отображающее список доступных продуктов для потенциального покупателя. Покупатель прокручивает список, чтобы просмотреть сведения о продукте и стоимости, и, наконец, выбирает продукт для покупки. Для остальной части списка выполняется дополнительная прокрутка и выделение. Что касается покупателя, продукты появляются по одному, но приложение использует прокручиваемый курсор для просмотра вверх и вниз по результирующем набору.
Курсоры можно использовать разными способами:
Без строк.
С некоторыми или всеми строками в одной таблице.
С некоторыми или всеми строками из логически соединенных таблиц.
Как доступный только для чтения или обновляемый на уровне курсора или поля.
Как только для пересылки или полностью прокручиваемый.
С набором ключей курсора, расположенным на сервере.
Учет изменений базовой таблицы, вызванных другими приложениями (например, членством, сортировкой, вставками, обновлениями и удалением).
Существует на сервере или на клиенте.
Курсоры только для чтения помогают пользователям просматривать результирующий набор, а курсоры чтения и записи могут реализовывать обновления отдельных строк. Сложные курсоры можно определить с помощью наборов ключей, указывающих на строки базовой таблицы. Хотя некоторые курсоры доступны только для чтения в направлении вперед, другие могут перемещаться вперед и назад, обеспечивая динамическое обновление результирующих наборов на основе изменений, внесенных другими приложениями в базу данных.
Не всем приложениям требуется использовать курсоры для доступа к данным или их обновления. Некоторые запросы просто не требуют прямого обновления строк с помощью курсора. Курсоры должны быть одним из последних методов извлечения данных. Затем следует выбрать максимально возможное влияние курсора. При создании результирующих наборов с помощью хранимой процедуры результирующий набор нельзя обновить с помощью методов редактирования курсора или обновления.
Параллелизма
В некоторых многопользовательских приложениях крайне важно, чтобы данные, представляемые конечному пользователю, были как можно более актуальными. Классическим примером такой системы является система резервирования авиакомпаний, где многие пользователи могут бороться за одно и то же место на данном рейсе (и, следовательно, один рекорд). В таком случае проект приложения должен обрабатывать одновременные операции с одной записью.
В других приложениях параллелизм не так важен. В таких случаях затраты, связанные с поддержанием актуальности данных в любое время, не могут быть оправданы.
Position
Курсор также отслеживает текущую позицию в результирующем наборе. Позицию курсора можно рассматривать как указатель на текущую запись, аналогично тому, как индекс массива указывает на значение в этом конкретном расположении в массиве.
Возможность прокрутки
Тип курсора, используемого приложением, также влияет на возможность перемещения вперед и назад по строкам в результирующем наборе; Иногда это называется возможностью прокрутки. Возможность перемещения вперед и назад по результирующем набору увеличивает сложность курсора и поэтому более затратна для реализации. По этой причине следует запрашивать курсор с этой функцией только при необходимости.