Как я могу получить имена таблиц из базы данных MS Access?

Microsoft SQL Server и MySQL имеют таблицу INFORMATION_SCHEMA, которую я могу запросить. Однако его нет в базе данных MS Access.

Есть ли эквивалент, который я могу использовать?


person luntain    schedule 14.10.2008    source источник


Ответы (7)


Чтобы опираться на ответ Ильи, попробуйте следующий запрос:

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 

Поскольку есть дополнительная таблица, которая выглядит как какая-то системная таблица.

person BIBD    schedule 14.10.2008
comment
Запись(и) не может быть прочитана; нет разрешения на чтение «MSysObjects». - person Ian Boyd; 05.07.2009
comment
Эта статья getSchema больше не существует. - person Warren P; 25.06.2012
comment
На этой странице есть несколько ответов, так почему же обратно? А почему с#? - person Fionnuala; 29.06.2012
comment
Почему WayBack - так я нашел оригинальный контент после того, как владелец блога по ссылке стер свой блог и перезапустил его. Почему С#? Это то, что владелец блога и человек, редактировавший мой пост, решили сделать год назад. Я просто исправлял битую ссылку. - person BIBD; 29.06.2012
comment
Вы правы... Я только что проверил редактирование hype8912, и он ошибся. Он работает в 2007 году. Вернулся! - person BIBD; 03.07.2012
comment
@PauAI - мне кажется. хотя, похоже, есть дополнительная системная таблица, я обновил ответ с исправлением для этого. - person BIBD; 26.10.2015

Вы можете использовать схемы в 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

person Fionnuala    schedule 14.10.2008

Вот обновленный ответ, который работает в Access 2010 VBA с использованием объектов доступа к данным (DAO). Имя таблицы хранится в 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
person Pete    schedule 12.04.2012

Информация о схеме, которая разработана так, чтобы быть очень близкой к информации SQL-92 INFORMATION_SCHEMA, может быть получена для механизма Jet/ACE (что, как я полагаю, вы подразумеваете под «доступом») через поставщиков OLE DB.

Видеть:

Метод OpenSchema (ADO)

Поддерживаемые наборы строк схемы

person onedaywhen    schedule 14.10.2008

Получение списка таблиц:

SELECT 
    Table_Name = Name, 
FROM 
    MSysObjects 
WHERE 
    (Left([Name],1)<>"~") 
    AND (Left([Name],4) <> "MSys") 
    AND ([Type] In (1, 4, 6)) 
ORDER BY 
    Name
person Ilya Kochetov    schedule 14.10.2008
comment
Работает только в старых версиях Access. - person Warren P; 25.06.2012
comment
MsysObjects являются неподдерживаемыми системными таблицами и не должны использоваться. Разрешения на эти таблицы за пределами MS Access могут быть очень рискованными. - person Fionnuala; 29.06.2012

Лучше не связываться с msysObjects (ИМХО).

CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros
person Jim    schedule 17.04.2017

person    schedule
comment
MsysObjects являются неподдерживаемыми системными таблицами и не должны использоваться. Разрешения на эти таблицы за пределами MS Access могут быть очень рискованными. - person Fionnuala; 29.06.2012