即:建立一个Access数据库连接后,如何看这个mdb文件中包含哪些表,各个表的字段属性等等信息

解决方案 »

  1.   

    Sub OpenConnection()   Dim cnn As New ADODB.Connection
       Dim cat As New ADOX.Catalog      cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source= c:\Program Files\Microsoft Office\" & _
          "Office\Samples\Northwind.mdb;"
       Set cat.ActiveConnection = cnn
       Debug.Print cat.Tables(0).Type
       '此处可循环读出表的name,type等属性
    End Sub查看字段
    Sub ViewFields()
       Dim cnn As New ADODB.Connection
       Dim rst As New ADODB.Recordset
       Dim fld As ADODB.Field
       Dim cat As New ADOX.Catalog   ' Open the Connection
       cnn.Open _
          "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=c:\Program Files\Microsoft Office\" & _
          "Office\Samples\Northwind.mdb;"   ' Open the catalog
       Set cat.ActiveConnection = cnn   ' Set the Source for the Recordset
       Set rst.Source = cat.Views("AllCustomers").Command   ' Retrieve Field information
       rst.Fields.Refresh
       For Each fld In rst.Fields
          Debug.Print fld.name & ":" & fld.Type
          '显示所有的字段的名称和类型
       NextEnd Sub
      

  2.   

    怎样使用一个查询获得数据库对象的名称(查询/窗体/表/报表/模块/宏)? 
    方法一: 请详细参阅ADO参考文档中OpenSchema 
    如:
    '功能:获取access库中表的个数及表的名称
    '用ado怎样实现
    '工程--->引用--->Microsoft ActiveX Data Object 2.x(版本号)
    '----------------------------------------------------------------------------
    Private Sub Form_Load()
    Dim adoCN   As New ADODB.Connection                '定义数据库的连接
    Dim strCnn   As New ADODB.Recordset
    Dim rstSchema As New ADODB.Recordset
    Dim I As Integer
       str1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Northwind.MDB;Persist Security Info=False"
       adoCN.Open str1
             
       Set rstSchema = adoCN.OpenSchema(adSchemaTables)
         
       Do Until rstSchema.EOF
            If rstSchema!TABLE_TYPE = "TABLE" Then
               out = out & "Table  name:  " & _
                   rstSchema!TABLE_NAME & vbCr & _
                   "Table  type:  " & rstSchema!TABLE_TYPE & vbCr
                I = I + 1
            End If
            rstSchema.MoveNext
       Loop
       MsgBox I
       rstSchema.Close
         
       adoCN.Close
    Debug.Print out
    End Sub方法二: Access 系统表 MsysObjects 包含了数据库对象列表, 尽管未在文档中记载, 你仍可通过查询它来获取你想要的.注: 请不要有意或无意地修改任何ACCESS系统表,否则会出现不可意料的情况.使用下列 SQL 语句来获取你想要的查询:
    SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)=5 ORDER BY MSysObjects.Name; 
    窗体:
    SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)=-32768 ORDER BY MSysObjects.Name; 
    表:
    SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (Left$([Name],4) <> "Msys") AND (MSysObjects.Type)=1 ORDER BY MSysObjects.Name; 
    报表:
    SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)= -32764 ORDER BY MSysObjects.Name; 
    模块:
    SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)= -32761 ORDER BY MSysObjects.Name; 
    宏:
    SELECT MSysObjects.Name FROM MsysObjects WHERE (Left([Name],1)<>"~") AND (MSysObjects.Type)= -32766 ORDER BY MSysObjects.Name;