Шаг 102 - Свойство NoMatch.

Описание
Показывает, была ли найдена нужная запись в результате вызова метода Seek или одного из методов группы Find (только в рабочей области Microsoft Jet).

Значение
Возвращаемое значение имеет тип Boolean и содержит значение True, нужная запись не найдена. При открытии или создании объекта Recordset его свойство NoMatch получает значение False.

Замечания
Для поиска определенной записи следует вызвать метод Seek для объекта Recordset типа таблицы или один из методов группы Find для объекта Recordset типа динамического или статического набора записей. После вызова этих методов значение свойства NoMatch позволяет определить, была ли найдена нужная запись.
Если поиск с помощью метода Seek или одного из методов Find оказался неудачным и свойство NoMatch имеет значение True, то текущая запись набора становится неопределенной. Если впоследствии может возникнуть необходимость вернуться к текущей записи, то перед вызовом методов поиска следует запомнить положение текущей записи с помощью закладки.
Вызов любого из методов группы Move для объекта Recordset не влияет на значение свойства NoMatch этого объекта.

Пример
Следующая программа использует свойство NoMatch для проверки выполнения методов Seek и FindFirst и для соответствующей обработки при неудаче. Для выполнения данной процедуры требуются процедуры SeekMatch и FindMatch.

Sub NoMatchX()

	Dim dbsNorthwind As Database
	Dim rstProducts As Recordset
	Dim rstCustomers As Recordset
	Dim strMessage As String
	Dim strSeek As String
	Dim strCountry As String
	Dim varBookmark As Variant

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	' Значение по умолчанию dbOpenTable; 
	' необходимо, если будет использоваться свойство Index.
	Set rstProducts = dbsNorthwind.OpenRecordset("Товары")

	With rstProducts
		.Index = "PrimaryKey"

		Do While True
			' Отображает сведения о текущей записи; 
			' выводит приглашение пользователю.
			strMessage = "Свойство NoMatch для метода Seek " & vbCr &  "Код товара: " & !КодТовара & vbCr & _
				"Марка: " & !Марка & vbCr & 	"NoMatch = " & .NoMatch & vbCr & vbCr &  "Введите код товара."
			strSeek = InputBox(strMessage)
			If strSeek = "" Then Exit Do
			' Вызывает процедуру для поиска записей 
			' с кодом товара, указанным пользователем.
			SeekMatch rstProducts, Val(strSeek)
		Loop

		.Close
	End With

	Set rstCustomers = dbsNorthwind.OpenRecordset( "SELECT Название, Страна FROM Клиенты " & "ORDER BY Название", dbOpenSnapshot)
	With rstCustomers

		Do While True
			' Отображает сведения о текущей записи; 
			' выводит приглашение пользователю.
			strMessage = "Свойство NoMatch для метода FindFirst" & 	vbCr & "Клиент: " & !Название & _
			vbCr & "Страна: " & !Страна & vbCr & 	"NoMatch = " & .NoMatch & vbCr & vbCr & "Введите название страны."
			strCountry = Trim(InputBox(strMessage))
			If strCountry = "" Then Exit Do
			' Вызывает процедуру для поиска записей 
			' для страны, указанной пользователем.
			FindMatch rstCustomers,  "Страна = '" & strCountry & "'"
		Loop
		.Close
	End With
	dbsNorthwind.Close
End Sub

Sub SeekMatch(rstTemp As Recordset, intSeek As Integer)

	Dim varBookmark As Variant
	Dim strMessage As String

	With rstTemp
		' Запоминает положение текущей записи.
		varBookmark = .Bookmark
		.Seek "=", intSeek

		' При неудачном поиске в методе Seek, уведомляет 
		' пользователя и возвращается на бывшую текущую запись.
		If .NoMatch Then
			strMessage = 	"Запись не найдена! Возврат на текущую запись." & vbCr & vbCr & "NoMatch = " & .NoMatch

		MsgBox strMessage
			.Bookmark = varBookmark
		End If

	End With

End Sub

Sub FindMatch(rstTemp As Recordset, strFind As String)

	Dim varBookmark As Variant
	Dim strMessage As String

	With rstTemp
		' Запоминает положение текущей записи.
		varBookmark = .Bookmark
		.FindFirst strFind

		' При неудачном поиске в методе Find, уведомляет 
		' пользователя и возвращается на бывшую текущую запись.
		If .NoMatch Then

		strMessage = "Запись не найдена! Возврат на текущую запись." & 	vbCr & vbCr & "NoMatch = " & .NoMatch
			MsgBox strMessage
			.Bookmark = varBookmark
		End If
	End With
End Sub

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