Подтвердить что ты не робот

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

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

Можно ли использовать эквивалент?

4b9b3361

Ответ 1

Чтобы построить на 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

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

Вот обновленный ответ, который работает в 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

Ответ 4

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

См:

Метод OpenSchema (ADO)

Поддерживаемые линейки схем

Ответ 5

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

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

SELECT 
Name 
FROM 
MSysObjects 
WHERE 
(Left([Name],1)<>"~") 
AND (Left([Name],4) <> "MSys") 
AND ([Type] In (1, 4, 6)) 
ORDER BY 
Name

Ответ 7

Лучше не вмешиваться в msysObjects (IMHO).

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