VBA (?): Документ базы данных Microsoft Access для набора данных (список таблиц / полей / запросов с полями) - PullRequest
0 голосов
/ 15 марта 2019

Ищите способ, которым я могу взять базу данных Access и экспортировать что-то вроде:

| Type           |   Name       |   Field     |     Field Type      |     Example values         |  SQL                                     |
| Table          |   Table1     |   Field1    |     String          |     Field example 1/2/3    |                                          | 
| Table          |   Table1     |   Field2    |     String          |     Field example 1/2/3    |                                          |
| Table          |   Table1     |   Field3    |     String          |     Field example 1/2/3    |                                          |
| ViewOutput     | SelectedCols |   Field 1   |     ...             |     Field example 1/2/3    |                                          |
| ViewOutput     | SelectedCols |   Field 2   |     ...             |     Field example 1/2/3    |                                          |
| ViewDefinition | SelectedCols |   Field 1   |     Field Type      |                            |  SELECT [field1], [field2] from [Table1] |

Другими словами:

  • Электронная таблица / набор данных, в которомпредставлено
    • Все таблицы по имени, а также базовые имена полей / типы / представлены несколько примеров значений столбцов (*)
    • Все представления по имени, а также определенные имена полей и примеры значений (*)

* в идеале / опционально я получаю три примерных значения поля, разделенных запятыми

Это было бы замечательной отправной точкой при переходе от Access к более серьезной базе данных, помощь очень признателен.

Ответы [ 2 ]

1 голос
/ 15 марта 2019

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

О получении примеров значений, для этого вам нужно будет открыть набор записей для каждого объекта, поскольку этот код занимает довольно много времени. Кроме того, вы запрашиваете 1-3 значения, когда в запросе / таблице может быть 0,1 или 2, поэтому также необходимо проверять каждый раз количество записей и так далее. Так что я проигнорировал эту часть.

Но, по крайней мере, код получит таблицы и запросы с именами, полями и именами полей.

БОНУС: Да, он также получит SQL-код запросов.

Private Sub SHOW_DB_INFO()

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

Dim AppExcel As Object
Dim WK As Object

Set AppExcel = CreateObject("Excel.Application")
AppExcel.Visible = False
AppExcel.ScreenUpdating = False
AppExcel.Workbooks.Add

Set WK = AppExcel.ActiveWorkbook.ActiveSheet




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
        i = i + 1
        WK.Range("A" & i).Value = "Table"
        WK.Range("B" & i).Value = tdf.Name
        WK.Range("C" & i).Value = tdf.Fields(x).Name
        WK.Range("D" & i).Value = FLD_TYPENAME(tdf.Fields(x).Type) 'enumeration can be found here: https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/datatypeenum-enumeration-dao
      Next x
   End If
Next tdf

Dim qdf As QueryDef
For Each qdf In db.QueryDefs
    For x = 0 To qdf.Fields.Count - 1
        i = i + 1
        WK.Range("A" & i).Value = "Query"
        WK.Range("B" & i).Value = qdf.Name
        WK.Range("C" & i).Value = qdf.Fields(x).Name
        WK.Range("D" & i).Value = FLD_TYPENAME(qdf.Fields(x).Type)
        WK.Range("E" & i).Value = qdf.SQL
    Next x
Next qdf

AppExcel.Visible = True
AppExcel.ScreenUpdating = True

Set WK = Nothing
Set AppExcel = Nothing

End Sub

Вам понадобится также этот UDF

Private Function FLD_TYPENAME(ByVal vType As Integer) As String
Select Case vType
    Case Is = 101: FLD_TYPENAME = "Attachment data"
    Case Is = 16: FLD_TYPENAME = "Big Integer data"
    Case Is = 9: FLD_TYPENAME = "Binary data"
    Case Is = 1: FLD_TYPENAME = "Boolean (True/False) data"
    Case Is = 2: FLD_TYPENAME = "Byte (8-bit) data"
    Case Is = 18: FLD_TYPENAME = "Text data (fixed width)"
    Case Is = 102: FLD_TYPENAME = "Multi-valued byte data"
    Case Is = 108: FLD_TYPENAME = "Multi-value decimal data"
    Case Is = 106: FLD_TYPENAME = "Multi-value double-precision floating-point data"
    Case Is = 107: FLD_TYPENAME = "Multi-value GUID data"
    Case Is = 103: FLD_TYPENAME = "Multi-value integer data"
    Case Is = 104: FLD_TYPENAME = "Multi-value long integer data"
    Case Is = 105: FLD_TYPENAME = "Multi-value single-precision floating-point data"
    Case Is = 109: FLD_TYPENAME = "Multi-value Text data (variable width)"
    Case Is = 5: FLD_TYPENAME = "Currency data"
    Case Is = 8: FLD_TYPENAME = "Date value data"
    Case Is = 20: FLD_TYPENAME = "Decimal data (ODBCDirect only)"
    Case Is = 7: FLD_TYPENAME = "Double-precision floating-point data"
    Case Is = 21: FLD_TYPENAME = "Floating-point data (ODBCDirect only)"
    Case Is = 15: FLD_TYPENAME = "GUID data"
    Case Is = 3: FLD_TYPENAME = "Integer data"
    Case Is = 4: FLD_TYPENAME = "Long Integer data"
    Case Is = 11: FLD_TYPENAME = "Binary data (bitmap)"
    Case Is = 12: FLD_TYPENAME = "Memo data (extended text)"
    Case Is = 19: FLD_TYPENAME = "Numeric data (ODBCDirect only)"
    Case Is = 6: FLD_TYPENAME = "Single-precision floating-point data"
    Case Is = 10: FLD_TYPENAME = "Text data (variable width)"
    Case Is = 22: FLD_TYPENAME = "Data in time format (ODBCDirect only)"
    Case Is = 23: FLD_TYPENAME = "Data in time and date format (ODBCDirect only)"
    Case Is = 17: FLD_TYPENAME = "Variable Binary data (ODBCDirect only)"
    Case Else: FLD_TYPENAME = "Not found/Unknown"
End Select

End Function

Код должен быть выполнен из самого Access. Вставьте оба кода в модуль и выполните его.

Надеюсь, вы сможете адаптировать это к вашим потребностям.

0 голосов
/ 16 марта 2019

Возможность распечатать или экспортировать структуру встроена для доступа.

На ленте, под инструментами базы данных, выберите базу данных Documenter.

Выберите вкладку таблиц, выберите таблицы, по которым вы хотите составить отчет.

ДО того, как вы нажмете "ОК", убедитесь, что вы нажали такие опции:

enter image description here

Результат будет таким:

enter image description here Просматривая выше, вы можете распечатать или даже экспортировать в Excel.

...