Шаг 91 - Свойства BOF, EOF

Описание
BOF - возвращает значение, показывающее, расположен ли указатель текущей записи в позиции перед первой записью объекта Recordset.
EOF - возвращает значение, показывающее, расположен ли указатель текущей записи в позиции после последней записи объекта Recordset.

Значение
Возвращаемые значения свойств BOF и EOF имеют тип данных Boolean.
Свойство BOF возвращает значение True, если указатель текущей записи расположен перед первой записью набора записей, и значение False, если указатель текущей записи расположен на первой записи набора или на любой записи после нее.
Свойство EOF возвращает значение True, если указатель текущей записи расположен после последней записи набора, и значение False, если указатель текущей записи расположен на последней записи набора или на любой записи перед ней.

Замечания
Свойства BOF и EOF используют для проверки наличия записей в объекте Recordset, а также для сообщения о выходе за пределы объекта при перемещении от записи к записи.
Возвращаемые значения свойств BOF и EOF определяются положением указателя текущей записи.
Если любое из свойств BOF или EOF имеет значение True, текущая запись не определена.
При открытии объекта Recordset, не содержащего ни одной записи, оба свойства BOF и EOF получают значение True, а свойство набора записей RecordCount (число записей) получает значение 0. При открытии объекта Recordset, который содержит хотя бы одну запись, первая запись набора становится текущей записью, а свойства BOF и EOF получают значения False. Данные свойства сохраняют значения False до тех пор, пока указатель текущей записи не переместится за пределы начала или конца набора записей при использовании, соответственно, методов MovePrevious или MoveNext, соответственно. После выхода за пределы набора записей текущая запись становится неопределенной.
После удаления последней оставшейся записи объекта Recordset свойства BOF и EOF могут сохранять значение False до тех пор, пока не будет предпринята попытка изменить положение указателя текущей записи.
При вызове метода MoveLast для объекта Recordset, содержащего записи, текущей записью становится последняя запись набора. Если после этого вызвать метод MoveNext, то текущая запись становится неопределенной, а свойство EOF получает значение True. Аналогично, при вызове метода MoveFirst для непустого объекта Recordset текущей записью становится первая запись набора. Последующий вызов метода MovePrevious приводит к тому, что текущая запись становится неопределенной, а свойство BOF получает значение True.>br> Как правило, при работе со всеми записями из объекта Recordset в программе задают перемещение в цикле по записям с помощью метода MoveNext до тех пор, пока свойство EOF не получит значение True.
Вызов метода MoveNext или MovePrevious, когда, соответственно, свойство EOF или BOF имеет значение True, приводит к возникновению ошибки.
В следующей таблице показано, какие из методов группы Move можно применять при различных комбинациях значений свойств BOF и EOF.

			MoveFirst,		MovePrevious,	MoveNext,
			MoveLast	Move < 0		Move 0		Move > 0

BOF=True,
EOF=False	Допускается	Ошибка			Ошибка		Допускается
BOF=False,
EOF=True	Допускается	Допускается		Ошибка		Ошибка
Оба True	Ошибка		Ошибка			Ошибка		Ошибка
Оба False	Допускается	Допускается		Допускается	Допускается

Допустимость применения метода из группы Move еще не означает, что метод обязательно обнаружит запись. Это просто означает, что попытка выполнить указанный метод Move является допустимой и не приведет к ошибке. В результате вызова метода из группы Move состояние свойств BOF и EOF может измениться.
При вызове метода OpenRecordset неявно выполняется метод MoveFirst. Таким образом, в результате вызове метода OpenRecordset для пустого набора записей свойства BOF и EOF получают значение True. (Результаты неудачной попытки выполнить метод MoveFirst представлены в приведенной ниже таблице).
Все методы группы Move, в которых успешно обнаруживается запись, задают для свойств BOF и EOF значение False.
В рабочей области Microsoft Jet при добавлении записи в пустой объект Recordset, свойство BOF получает значение False, а свойство EOF сохраняет значение True, указывающее, что позиция текущей записи находится в конце объекта Recordset. В рабочей области ODBCDirect оба свойства BOF и EOF получают значение False, указывающее, что позиция текущей записи находится на новой записи.
Любой вызов метода Delete, даже приводящий к удалению последней записи из набора записей, не изменяет значения свойств BOF и EOF.
Результаты для свойств BOF и EOF вызова одного из методов Move, не приведшего к обнаружению записи, представлены в следующей таблице.

				BOF			EOF
MoveFirst, MoveLast		True 			True 
Move 0				Без изменений		Без изменений
MovePrevious, Move < 0		True 			Без изменений
MoveNext, Move > 0			Без изменений		True 

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

Sub BOFX()

	Dim dbsNorthwind As Database
	Dim rstCategories As Recordset
	Dim strMessage As String

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set rstCategories = dbsNorthwind.OpenRecordset("Типы", 	dbOpenSnapshot)
	With rstCategories
		' Заполняет объект Recordset.
		.MoveLast
		.MoveFirst

		Do While True
			' Отображает сведения о текущей записи 
			' и принимает данные от пользователя.
			strMessage = "Категория: " & !Категория & vbCr & "(запись " & (.AbsolutePosition + 1) & _
				" из " & .RecordCount & ")" & vbCr & vbCr & "1 - вперед, 2 - назад"
			' Переход вперед или назад и перехват меток BOF или EOF.
			Select Case InputBox(strMessage)
				Case 1
					.MoveNext
					If .EOF Then
						MsgBox 	"Конец файла!" & vbCr & "Указатель передвинут на последнюю запись."
						.MoveLast
					End If

				Case 2
					.MovePrevious
					If .BOF Then
						MsgBox 	"Начало файла!" & vbCr & "Указатель передвинут на первую запись."
						.MoveFirst
					End If

				Case Else
					Exit Do
			End Select
		Loop
		.Close
	End With

	dbsNorthwind.Close

End Sub

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