Шаг 66 - Метод CreateProperty

Описание
Создает новый определяемый пользователем объект Property (только в рабочей области ядра Microsoft Jet).

Set свойство = объект.CreateProperty (имя, тип, значение, кодDDL)

Параметры
свойство
Объектная переменная, представляющая создаваемый объект Property.
объект
Объектная переменная, представляющая объект Database, Field, Index, QueryDef, Document или TableDef, который используется при создании нового объекта Property.
имя
Необязательный. Выражение или переменная типа Variant (подтип String), содержащая уникальное имя нового объекта Property. Сведения о допустимых именах свойств приведены в разделе о свойстве Name.
тип
Необязательный. Константа, определяющая тип данных нового объекта Property. Сведения о допустимых константах определения типа данных приведены в разделе о свойстве Type.
значение
Необязательный. Выражение или переменная типа Variant, содержащая начальное значение свойства. Дополнительные сведения приведены в разделе о свойстве Value.
кодDDL
Необязательный. Выражение или переменная типа Variant (подтип Boolean), указывающая, является или нет объект Property объектом языка описания данных (DDL). По умолчанию задается значение False. Если кодDDL имеет значение True, данный объект Property может быть изменен или удален только пользователем, имеющим разрешение dbSecWriteDef.

Замечания
Определяемый пользователем объект Property может быть создан только в постоянном семействе Properties (то есть уже сохраненном на диске).
Если один или несколько необязательных элементов синтаксиса опущены при вызове метода CreateProperty, допускается использование соответствующих инструкций присваивания для задания или изменения значения соответствующего свойства перед добавлением нового объекта в семейство. После добавления нового объекта в семейство можно будет изменить значения некоторых (но не всех) его свойств. Дополнительные сведения приведены в разделах, посвященных свойствам Name, Type и Value.
Если аргумент имя указывает на объект, который уже добавлен в семейство, то при вызове метода Append возникает ошибка выполнения.
Для удаления определяемого пользователем объекта Property следует применить метод Delete к семейству Properties. Встроенные свойства удалить нельзя.
Если опустить аргумент кодDDL, он по умолчанию получает значение False (объект не является объектом DDL). Поскольку свойства, определяющего объект языка описания данных, не существует, то для превращения объекта DDL в объект, не являющийся объектом DDL, необходимо для преобразования объекта удалить и снова создать объект Property.

Пример
В следующей программе делается попытка задать значение определяемого пользователем свойства. Если свойство не существует, вызывается метод CreateProperty для создания нового свойства и задания его значения. Для выполнения этой процедуры требуется процедура SetProperty.

Sub CreatePropertyX()

	Dim dbsNorthwind As Database
	Dim prpLoop As Property

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	' Задает для свойства "Архивный " значение True.
	SetProperty dbsNorthwind, "Архивный", True
	
	With dbsNorthwind
		Debug.Print "Свойства " & .Name
		' Отображает семейство Properties базы данных "Борей".
		For Each prpLoop In .Properties
			If prpLoop <> "" Then Debug.Print "    " & prpLoop.Name & " = " & prpLoop
	Next prpLoop

		' Удаляет новое свойство, созданное только
		' для демонстрации.
		.Properties.Delete "Архивный"
		.Close
	End With
End Sub

Sub SetProperty(dbsTemp As Database, strName As String, booTemp As Boolean)

	Dim prpNew As Property
	Dim errLoop As Error

	' Делает попытку задать значение указанного свойства.
	On Error GoTo Err_Property
	dbsTemp.Properties("strName") = booTemp
	On Error GoTo 0
	Exit Sub

Err_Property:

	' Ошибка 3270 означает, что свойство не найдено.
	If DBEngine.Errors(0).Number = 3270 Then
		' Создает свойство, задает его значение и добавляет 
		' свойство в семейство Properties.
		Set prpNew = dbsTemp.CreateProperty(strName, 	dbBoolean, booTemp)
		dbsTemp.Properties.Append prpNew
		Resume Next
	Else
		' При возникновении другой ошибки выводит сообщение.
		For Each errLoop In DBEngine.Errors
			MsgBox "Код ошибки: " & errLoop.Number & vbCr & errLoop.Description
		Next errLoop
		End
	End If
End Sub

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