MS Access metadata?

My problem is:
How can I get all table name, column names in a Access file by using queries?
Thankx alot!
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

shanesuebsahakarnConnect With a Mentor Commented:
If you use the piece of code that I have posted above, you'll have a table containing table and fieldnames, which you can then run a query on to retrieve just the fieldnames of the table that you are interested in, i.e.:

SELECT FieldName FROM MyTable WHERE TableName="SomeTable"

after you've run the code.
All table names:

SELECT [Name] FROM MSysObjects WHERE [Type]=1

As for field names, you can't retrieve this in a query. You can construct a new table to hold this data though. Run this function to load the table with all the table/field names:

Function GetTableFields()
Dim fld As Field
Dim tdf As TableDef

For Each tdf In CurrentDb.TableDefs
   For Each fld In tdf.Fields
      CurrentDb.Execute "INSERT INTO MyTable ([TableName],[FieldName]) VALUES ('" & tdf.Name & "','" & fld.Name & "')"
End Function

This assumes you have a table called MyTable containing the fields TableName and FieldName (both text).
tinh911Author Commented:
It means that I can't retrieve the field names of a table in a query!
tinh911Author Commented:
Thank you!
Here's a simple example that will dump metadata to a table.  Should provide a good starting point.
Public Sub PopulateTableMetadata()
    ' This is a simple procedure that will create a table and
    ' populate it with metadata from the database
    ' It should get you started - modify to suit your specific needs
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
    Dim qd As DAO.QueryDef
    Dim rs As DAO.Recordset
    Set db = CurrentDb()
    ' First create the metadata table, if it doesn't exist
    On Error Resume Next ' allows you to keep going if the table doesn't exist - admitted
    Set tdf = db.TableDefs("table_metadata")
    If tdf Is Nothing Then
        Set tdf = db.CreateTableDef("table_metadata")
        With tdf
            .Fields.Append .CreateField("table_nm", dbText, 255)
            .Fields.Append .CreateField("column_nm", dbText, 255)
            .Fields.Append .CreateField("zero_length_ind", dbBoolean)
            .Fields.Append .CreateField("required_ind", dbBoolean)
            .Fields.Append .CreateField("length_no", dbInteger)
        End With
        db.TableDefs.Append tdf
        Set qd = db.CreateQueryDef("")
        qd.SQL = "DELETE * FROM table_metadata"
    End If
    ' Next, populate the table
    Set rs = tdf.OpenRecordset(dbOpenDynaset)
    For Each tdf In db.TableDefs
        For Each fld In tdf.Fields
            With rs
                !table_nm = tdf.Name
                !column_nm = fld.Name
                !zero_length_ind = fld.AllowZeroLength
                !required_ind = fld.Required
                !length_no = fld.Size
            End With
    Set rs = Nothing
    Set fld = Nothing
    Set tdf = Nothing
    Set db = Nothing
End Sub

Open in new window

All Courses

From novice to tech pro — start learning today.