Как получить список полей и соответствующих таблиц, используемых в базе данных MS Access 2010?

Я знаю, что так вы получите список всех таблиц в базе данных (и больше, если вы измените критерию:

SELECT *
FROM MSysObjects
WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0));

но есть ли аналогичный способ получить список полей и к каким таблицам они принадлежат? Я думаю, что это было бы очень полезно для устранения неполадок и быстрого аудита (т. е. ответа "какие другие таблицы являются этим полем или группой полей, используемых в"). Но по каким-то причинам не смог найти ответ в сети.

Если у кого-то есть относительно простой способ сделать это через VBA, это тоже может быть вариантом.
Благодаря.

6
задан Shekhar
11.04.2023 10:56 Количество просмотров материала 3165
Распечатать страницу

2 ответа

к сожалению, имена полей недоступны в компактном SQL-запросе. Этот код напечатает имя таблицы и каждое поле в отдельной строке окна отладки.

Private Sub ShowTableFields()

Dim db As Database
Dim tdf As TableDef
Dim x As Integer

Set db = CurrentDb

For Each tdf In db.TableDefs
   If Left(tdf.Name, 4) <> "MSys" Then ' Don't enumerate the system tables
      For x = 0 To tdf.Fields.Count - 1
      Debug.Print tdf.Name & "','" & tdf.Fields(x).Name
      Next x
   End If
Next tdf
End Sub
3
отвечен SeanC 2023-04-12 18:44

В этом конкретном случае схемы ADO могут оказаться полезными.

Это будет список полей и некоторые свойства для конкретной таблицы. Будьте осторожны с типами данных, вы не можете получить точное соответствие с типами DAO. Вам понадобится ссылка на Microsoft ActiveX Data Objects x.x Library, Если вы используете позднее связывание.

Dim cn As New ADODB.Connection, cn2 As New ADODB.Connection
Dim rs As ADODB.Recordset, rs2 As ADODB.Recordset

   Set cn = CurrentProject.Connection

   Set rs = cn.OpenSchema(adSchemaTables, _
       Array(Empty, Empty, Empty, "tablenamehere"))

   While Not rs.EOF
       Debug.Print rs!table_name; "   desc=  "; rs!Description
       Set rs2 = cn.OpenSchema(adSchemaColumns, _
           Array(Empty, Empty, "" & rs!table_name & ""))
       While Not rs2.EOF
           Debug.Print "     " & rs2!Column_Name
           Debug.Print "     " & rs2!Data_Type
           Debug.Print "     " & rs2!Description
           Debug.Print "     " & rs2!Is_Nullable
           rs2.MoveNext
       Wend
   rs.MoveNext
   Wend
   rs.Close
   Set cn = Nothing

вы также можете смотреть на вещи наоборот и получить список таблиц, которые содержат конкретной области.

Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset
Dim strTempList As String

   On Error GoTo Error_Trap

   Set cn = CurrentProject.Connection

   'Get names of all tables that have a column called <SelectFieldName>
   Set rs = cn.OpenSchema(adSchemaColumns, _
   Array(Empty, Empty, Empty, SelectFieldName))

   'List the tables that have been selected
   While Not rs.EOF
       'Exclude MS system tables
       If Left(rs!Table_Name, 4) <> "MSys" Then
           strTempList = strTempList & "," & rs!Table_Name
       End If
       rs.MoveNext
   Wend

   ListTablesContainingField = Mid(strTempList, 2)

от: http://wiki.lessthandot.com/index.php/ADO_Schemas

и StackOverflow и совсем немного по теме: https://stackoverflow.com/search?q=%5Bms-access%5D+схемы

1
отвечен Remou 2023-04-12 21:01

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх