Шаг 204 - Свойство DistinctCount

Описание
Возвращает значение, показывающее количество уникальных значений в объекте Index, являющемся частью присоединенной таблицы (только в рабочей области Microsoft Jet).

Значение
Возвращаемое значение имеет тип Long.

Замечания
Свойство DistinctCount позволяет определить количество уникальных значений, т.е. ключей, в индексе. Любой ключ подсчитывается только один раз, несмотря на возможность наличия повторяющихся значений в индексе, не являющемся уникальным. Данные сведения оказываются полезными в приложениях, в которых делается попытка оптимизировать доступ к данным с помощью информации, содержащейся в индексе. Число уникальных значений иногда называют мощностью или кардинальным числом объекта Index.

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

Пример
Следующая программа использует свойство DistinctCount для демонстрации определения числа уникальных значений в объекте Index. Однако данное значение является точным только сразу после создания объекта Index. Это значение останется точным, пока не будут изменены ключи, добавлены новые или удалены старые ключи. (При повторном выполнении данной процедуры пользователь имеет возможность увидеть результаты изменения значения свойства DistinctCount для существующих объектов Index).

Sub DistinctCountX()

	Dim dbsNorthwind As Database
	Dim tdfEmployees As TableDef
	Dim idxCountry As Index
	Dim idxLoop As Index
	Dim rstEmployees As Recordset

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set tdfEmployees = dbsNorthwind!Сотрудники

	With tdfEmployees
		' Создает и добавляет новый объект Index 
		' в таблицу "Сотрудники".
		Set idxCountry = .CreateIndex("ИндексСтрана")
		idxCountry.Fields.Append idxCountry.CreateField("Страна")

		.Indexes.Append idxCountry
		' Чтобы новое значение свойства DistinctCount стало 
		' доступным, необходимо обновить семейство.
		.Indexes.Refresh

		' Отображает семейство Indexes, чтобы показать 
		' текущие значения свойства DistinctCount.
		Debug.Print "Семейство Indexes до добавления записи"
		For Each idxLoop In .Indexes
			Debug.Print "    DistinctCount = " & _
			idxLoop.DistinctCount & ", Name = " & idxLoop.Name
		Next idxLoop

		Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники")
		' Добавляет новую запись в таблицу "Сотрудники".
		With rstEmployees
			.AddNew
			!Имя = "Петр"
			!Фамилия = "Петров"
			!Страна = "Чад"
			.Update
		End With

		' Отображает семейство Indexes, чтобы показать 
		' измененные значения свойства DistinctCount.
		Debug.Print "Семейство Indexes после добавления записи " & "и обновления семейства"
		.Indexes.Refresh
		For Each idxLoop In .Indexes
			Debug.Print "    DistinctCount = " & _
			idxLoop.DistinctCount & ", Имя = " & idxLoop.Name
		Next idxLoop

		' Удаляет новую запись, созданную только для демонстрации.
		With rstEmployees
			.Bookmark = .LastModified
			.Delete
			.Close
		End With

		' Удаляет новое семейство Indexes, созданное для демонстрации.
		.Indexes.Delete idxCountry.Name
	End With
	dbsNorthwind.Close
End Sub

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