代码之家  ›  专栏  ›  技术社区  ›  luntain

如何从MS Access数据库获取表名?

  •  29
  • luntain  · 技术社区  · 16 年前

    Microsoft SQL Server和MySQL有一个我可以查询的信息架构表。但是,它不存在于MS Access数据库中。

    是否有我可以使用的等价物?

    7 回复  |  直到 7 年前
        1
  •  56
  •   BIBD    9 年前

    要基于Ilya的答案,请尝试以下查询:

    SELECT MSysObjects.Name AS table_name
    FROM MSysObjects
    WHERE (((Left([Name],1))<>"~") 
            AND ((Left([Name],4))<>"MSys") 
            AND ((MSysObjects.Type) In (1,4,6)))
    order by MSysObjects.Name 
    

    (此操作不需要修改MDB)

    accdb用户可能需要这样做

    SELECT MSysObjects.Name AS table_name
    FROM MSysObjects
    WHERE (((Left([Name],1))<>"~") 
            AND ((Left([Name],4))<>"MSys") 
            AND ((MSysObjects.Type) In (1,4,6))
            AND ((MSysObjects.Flags)=0))
    order by MSysObjects.Name 
    

    因为包含了一个额外的表,似乎是某种类型的系统表。

        2
  •  9
  •   Fionnuala    16 年前

    您可以在Access中使用模式。

    Sub ListAccessTables2(strDBPath)
       Dim cnnDB As ADODB.Connection
       Dim rstList As ADODB.Recordset
    
       Set cnnDB = New ADODB.Connection
    
       ' Open the connection.
       With cnnDB
          .Provider = "Microsoft.Jet.OLEDB.4.0"
          .Open strDBPath
       End With
    
       ' Open the tables schema rowset.
       Set rstList = cnnDB.OpenSchema(adSchemaTables)
    
       ' Loop through the results and print the
       ' names and types in the Immediate pane.
       With rstList
          Do While Not .EOF
             If .Fields("TABLE_TYPE") <> "VIEW" Then
                Debug.Print .Fields("TABLE_NAME") & vbTab & _
                   .Fields("TABLE_TYPE")
             End If
             .MoveNext
          Loop
       End With
       cnnDB.Close
       Set cnnDB = Nothing
    End Sub
    

    来自: http://msdn.microsoft.com/en-us/library/aa165325(office.10).aspx

        3
  •  5
  •   Pete    12 年前

    下面是一个更新的答案,它在使用数据访问对象(DAO)的Access2010 VBA中工作。表名保存在tabledef.name中。所有表定义的集合保存在tabledefs中。下面是一个简单的表名循环示例:

    Dim db as Database
    Dim td as TableDef
    Set db = CurrentDb()
    For Each td In db.TableDefs
      YourSubTakingTableName(td.Name)
    Next td
    
        4
  •  2
  •   onedaywhen    16 年前

    可以通过OLE DB提供程序为jet/ace引擎(我认为这是“access”的意思)获取设计为非常接近SQL-92信息的模式信息。

    见:

    OpenSchema Method (ADO)

    Supported Schema Rowsets

        5
  •  1
  •   Matt user129975    9 年前

    获取表列表:

    SELECT 
        Table_Name = Name, 
    FROM 
        MSysObjects 
    WHERE 
        (Left([Name],1)<>"~") 
        AND (Left([Name],4) <> "MSys") 
        AND ([Type] In (1, 4, 6)) 
    ORDER BY 
        Name
    
        6
  •  0
  •   animuson Hemanshu    13 年前
    SELECT 
    Name 
    FROM 
    MSysObjects 
    WHERE 
    (Left([Name],1)<>"~") 
    AND (Left([Name],4) <> "MSys") 
    AND ([Type] In (1, 4, 6)) 
    ORDER BY 
    Name
    
        7
  •  0
  •   Jim    7 年前

    最好不要和msysobjects(imho)混在一起。

    CurrentDB.TableDefs
    CurrentDB.QueryDefs
    CurrentProject.AllForms
    CurrentProject.AllReports
    CurrentProject.AllMacros