Получите доступ к SQL (или коду VBA), чтобы получить список всех таблиц с хотя бы одним полем вложения - PullRequest
0 голосов
/ 18 июня 2019

У меня есть база данных Access с ~ 150 таблицами, и мне нужно найти способ вывести список всех таблиц хотя бы с одним полем вложения. Ходить и проверять вручную, вероятно, было бы кошмаром: /

Кто-нибудь использовал / имел запрос / процедуру Access SQL (или код VBA?), В котором перечислены все таблицы с хотя бы одним полем вложения?

Ответы [ 3 ]

2 голосов
/ 18 июня 2019

Цикл коллекции TableDefs .

Для каждого TableDef , цикл Fields collection.

Для каждого Поле проверьте свойство Тип (=, насколько я помню) или IsComplex = True.

IsComplex также верно для многозначных полей, но если вы их не используете, с вами все будет в порядке.

1 голос
/ 18 июня 2019

Вот что я придумал:

Public Function ListAttachmentTables()
Dim tdf As TableDef
Dim fld As Field
Dim FldsCnt As Long
Dim lngCountLoop As Long

    CurrentDb.TableDefs.Refresh
    For Each tdf In CurrentDb.TableDefs
        If Not tdf.Name Like "MSys*" Then
            For Each fld In tdf.Fields
                If fld.Type = 101 Or fld.IsComplex = True Then
                    Debug.Print tdf.Name & " / " & fld.Name
                End If
            Next fld
        End If
    Next tdf
    Set tdf = Nothing

End Function

При запуске ListAttachmentTables в непосредственном окне результат был:

ASSOC_CLOSING_INFO / Attachments
ASSOC_NAME2 / Attachments
Backup Closing Sharepoint / Documents
Backup Closing Sharepoint / Attachments
CC_Card / Field1
Closing_requests1 / Documents
Closing_requests1 / Delivery_Dates
Closing_requests1 / Total_Package
Closing_requests1 / Attachments
Mail_Requests / group1
Mail_Requests / group2
Mail_Requests / Attachments
MSysResources / Data
UserInfo / Attachments

Близко к тому, что мне было нужно, спасибо!

1 голос
/ 18 июня 2019

Вот пример на VBA.Он печатает немедленные (откройте редактор VBA Alt + F11, затем нажмите Ctrl + G) сообщения о таблицах с полем Тип вложения.

Public Sub subTest()
        Dim db As DAO.Database
        Dim td As DAO.TableDef
        Dim fld As DAO.Field
        Dim boolIsAttachmentFieldPresent As Boolean
        Set db = CurrentDb()
        For Each td In db.TableDefs

            If Left(td.Name, 4) <> "MSys" Then
                'Debug.Print "Contents of: " & td.Name
                boolIsAttachmentFieldPresent = False
                For Each fld In td.Fields
                    'Debug.Print fld.Name & " of type " & fld.Type
                    If fld.Type = 101 Then
                        boolIsAttachmentFieldPresent = True
                    End If
                Next fld
                If boolIsAttachmentFieldPresent Then
                    Debug.Print "Table " & td.Name & " contains attachment field"
                End If
            End If
        Next td
End Sub

Все как описано @Gustav.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...