Шаг 92 - Свойство Bookmark

Описание
Устанавливает или возвращает закладку, которая однозначно определяет текущую запись в Recordset.

Значение
Задаваемое или возвращаемое значение определяются строковым выражением или выражением типа Variant, значением которого является допустимая закладка. Типом данных является массив Variant элементов типа Byte.

Замечания
Для объекта Recordset, созданного исключительно на основе таблиц ядра базы данных Microsoft Jet, свойство Bookmarkable имеет значение True, и допускается использование свойства Bookmark для объектов Recordset. Например, не допускается использование закладок в любом объекте Recordset, созданном на основе присоединенной таблицы Paradox, в которой не определен ключ.
При создании или открытии объекта Recordset каждая из его записей получает уникальную закладку. Для того чтобы запомнить положение текущей записи, следует присвоить текущее значение свойства Bookmark переменной. Для быстрого возвращения к сохраненному в переменной указателю текущей записи в любое время после перехода на другую запись следует указать в значении свойства Bookmark объекта Recordset значение этой переменной.
Число возможных закладок в наборе записей не ограничивается. Для создания закладки, определяющей запись, отличную от текущей записи, следует перейти на нужную запись, а затем присвоить значение свойства Bookmark строковой переменной, которая будет указывать на нужную запись.
Перед использованием свойства Bookmark следует проверить значение свойства Bookmarkable объекта Recordset, которое определяет, поддерживает ли данный набор записей использование закладок. Если свойство Bookmarkable имеет значение False, объект Recordset не поддерживает закладки, и обращение к свойству Bookmark приведет к возникновению перехватываемой ошибки.
Если с помощью метода Clone создана копия объекта Recordset, то значения закладок для исходного объекта Recordset и его копии являются идентичными и допускают взаимную замену. Однако нельзя использовать подобным образом закладки из других объектов Recordset, даже если они были созданы на основе одного объекта или с помощью одинаковой инструкции SQL.
При попытке задать для свойства Bookmark значение, представляющее удаленную запись, возникает перехватываемая ошибка.
Значение свойства Bookmark не идентично номеру записи.

Пример
Следующая программа использует свойства Bookmark и Bookmarkable для запоминания позиции записи в объекте Recordset и возвращения к этой записи.

Sub BookmarkX()

	Dim dbsNorthwind As Database
	Dim rstCategories As Recordset
	Dim strMessage As String
	Dim intCommand As Integer
	Dim varBookmark As Variant

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set rstCategories = dbsNorthwind.OpenRecordset("Типы", dbOpenSnapshot)
	With rstCategories

		If .Bookmarkable = False Then
			Debug.Print "Объект Recordset не поддерживает закладки!"
		Else
			' Заполняет объект Recordset.
			.MoveLast
			.MoveFirst

			Do While True
				' Отображает сведения о текущей записи 
				' и принимает данные от пользователя.
				strMessage = "Категория: " & !Категория & _
					" (запись " & (.AbsolutePosition + 1) & _
					" из " & .RecordCount & ")" & vbCr & _
					"Введите команду:" & vbCr & _
					"[1 - следующая / 2 - предыдущая /" & vbCr & _
					"3 - установить закладку / 4 - перейти на закладку]"
				intCommand = Val(InputBox(strMessage))

					Select Case intCommand
					' Переход вперед или назад, перехват 
					' меток BOF или EOF.
					Case 1
						.MoveNext
						If .EOF Then .MoveLast
					Case 2
						.MovePrevious
						If .BOF Then .MoveFirst

					' Сохраняет закладку текущей записи.
					Case 3
						varBookmark = .Bookmark

					' Переходит на запись, отмеченную 
					' сохраненной закладкой.
					Case 4

						If IsEmpty(varBookmark) Then
							MsgBox "Нет установленной закладки!"
						Else
							.Bookmark = varBookmark
						End If

					Case Else
						Exit Do
				End Select
			Loop
		End If
		.Close
	End With

	dbsNorthwind.Close
End Sub

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 17.03.2002