Previous Page

Documenting Your Database

Before you distribute your database to users, you may want to document the objects in your database; the underlying structure, or schema, of your application; and any Data Access Objects (DAO) objects, methods, and properties. This is sometimes called mapping the database. When you have a complete map of your database, it's easier to modify the database and to write applications that manipulate the data.

If you just need information about application objects that appear in the user interface, you can use the Documenter (Tools menu, Analyze submenu) to produce a report on those objects. However, to obtain information about the DAO objects, properties, and methods that can't be manipulated by way of the user interface, you must use Visual Basic.

See Also   For more information on the Documenter, search the Help index for "Documenter."

Because DAO objects are organized in a hierarchy of nested containers, you can map the database by walking through the hierarchy with a series of nested For...Each loops. Each element in the collection can be accessed with a statement block with the following syntax:

For Each object In collection

   statements                     ' Map the properties of the object.

Next object

See Also   For information on individual properties that are exposed when you map a database, search the Help index for the name of the property.

The following code maps the current database. For brevity, the Attributes property is fully mapped only for each TableDef object. If you want to map attributes of the other objects, simply use the code for the TableDef object attributes as a model and insert the appropriate statements. This example assumes that the user running this code has at least Read Design permission on all tables in the database.

Sub MapDatabase()
   Dim dbs As Database, tdf As TableDef, fld As Field
   Dim idx As Index, rel As Relation
   Dim intX As Integer
   Set dbs = CurrentDb
   ' Map the Database properties.
   Debug.Print "DATABASE"
   Debug.Print "Name: ", dbs.Name
   Debug.Print "Connect string: ", dbs.Connect
   Debug.Print "Transactions supported?: ", dbs.Transactions
   Debug.Print "Updatable?: ", dbs.Updatable
   Debug.Print "Sort order: ", dbs.CollatingOrder
   Debug.Print "Query time-out: ", dbs.QueryTimeout
   ' Map the TableDef objects.
   Debug.Print "TABLEDEFS"
   For Each tdf in dbs.TableDefs
      Debug.Print "Name: ", tdf.Name
      Debug.Print "Name: ", tdf.DateCreated,
      Debug.Print "Name: ", tdf.LastUpdated,
      If tdf.Updatable = True Then
         Debug.Print "Updatable",
      Else
         Debug.Print "Not Updatable",
      End If
      ' Show the TableDef Attributes.
      Debug.Print Hex$(tdf.Attributes)
      If (tdf.Attributes And dbSystemObject) <> 0 Then
         Debug.Print "System object"
      End If
      If (tdf.Attributes And dbAttachedTable) <> 0 Then
         Debug.Print "Linked table"
      End If
      If (tdf.Attributes And dbAttachedODBC) <> 0 Then
         Debug.Print "Linked ODBC table"
      End If
      If (tdf.Attributes And dbAttachExclusive)<> 0 Then
         Debug.Print "Linked table opened in exclusive mode"
      End If
      ' Map Fields for each TableDef object.
      Debug.Print "FIELDS"
      For Each fld in tdf.Fields
         Debug.Print "Name: ", fld.Name
         Debug.Print "Type: ", fld.Type
         Debug.Print "Size: ", fld.Size
         Debug.Print "Attribute Bits: ", Hex$(fld.Attributes)
         Debug.Print "Collating Order: ", fld.CollatingOrder
         Debug.Print "Ordinal Position: ", fld.OrdinalPosition
         Debug.Print "Source Field: ", fld.SourceField
         Debug.Print "Source Table: ", fld.SourceTable
         ' Show the Field Attributes here.
         Debug.Print Hex$(fld.Attributes)
         If (fld.Attributes And dbSystemObject) <> 0 Then
            Debug.Print "System Object"
         End If
      Next fld         ' Get the next Field in the TableDef object.
      ' Map Indexes for each TableDef object.
      Debug.Print "INDEXES"
      For Each idx in tdf.Indexes
         ' Set the Index variable.
         Set idx = tdf.Indexes(intX)
         Debug.Print "Name: ", idx.Name
         Debug.Print "Clustered: ", idx.Clustered
         Debug.Print "Foreign: ", idx.Foreign
         Debug.Print "IgnoreNulls: ", idx.IgnoreNulls
         Debug.Print "Primary: ", idx.Primary
         Debug.Print "Unique: ", idx.Unique
         Debug.Print "Required: ", idx.Required
         ' Map the Fields of the Index.
         For Each fld in idx.Fields
            Debug.Print "Name: ", fld.Name
         Next fld      ' Get the next Field in the Index.
      Next idx         ' Get the next Index in the TableDef object.
   Next tdf            ' Get next TableDef in the Database.
   ' Map the Relation objects.
   Debug.Print "RELATIONS"
   For Each rel in dbs.Relations
      Debug.Print "Name: ", rel.Name
      Debug.Print "Attributes: ", rel.Attributes   
      Debug.Print "Table: ", rel.Table
      Debug.Print "ForeignTable: ", rel.ForeignTable
      ' Map the Fields of the Relation objects.
      For Each fld in rel.Fields
         Debug.Print "Name: ", fld.Name
         Debug.Print "ForeignName: ", fld.ForeignName
      Next fld         ' Get the next Field in the Relation object.
   Next rel            ' Get next Relation object in the Database.
End Sub

© 1996 Microsoft Corporation. All rights reserved.

Next Page


Casa de Bender