Earlier, this chapter introduced user-defined properties, which you can use to store and retrieve your own information about an object. DAO is extensible by using these properties. The following function tries to set a property on an object. If the property doesn’t exist in that object’s Properties collection, then the function creates the property and appends it to the collection:
Function SetCustomProperty(obj As Object, strName As String, _ intType As Integer, varSetting As Variant) As Boolean ' This procedure attempts to set a property on an object. ' If the property does not exist in the object's Properties collection, ' then the procedure creates the object. Dim prp As Property Const conPropNotFound As Integer = 3270 On Error GoTo ErrorSetCustomProperty ' Explicitly refer to Properties collection. obj.Properties(strName) = varSetting obj.Properties.Refresh SetCustomProperty = True ExitSetCustomProperty: Exit Function ErrorSetCustomProperty: If Err = conPropNotFound Then ' Create property, denote type, and set initial value. Set prp = obj.CreateProperty(strName, intType, varSetting) ' Append Property object to Properties collection. obj.Properties.Append prp obj.Properties.Refresh SetCustomProperty = True Resume ExitSetCustomProperty Else MsgBox Err & ": " & vbCrLf & Err.Description SetCustomProperty = False Resume ExitSetCustomProperty End If End Function
For example, to create a property called DateLastModified on each table in a database, you may call this function from the following code, which creates the property on each table that isn’t a system object. In this example, strDbPath
is the path to the database:
Dim dbs As Database, tdf As TableDef ' Define constant to specify system object. Const conSystemObject As Long = -2147483648 Set dbs = OpenDatabase(strDbPath) For Each tdf In dbs.TableDefs ' Check to see whether table is system object or hidden. If Not (tdf.Attributes And conSystemObject) = conSystemObject Then If Not (tdf.Attributes And dbHiddenObject) = dbHiddenObject Then ' Set property. SetCustomProperty tdf, "DateLastModified", dbDate, Now End If End If Next tdf
Of course, simply adding a property doesn’t automatically update and maintain it. In the previous example, the DateLastModified property is added to the TableDef object, but that’s the extent of what the code does. Your application must programmatically update the value of this property when appropriate.