DDL для создания таблиц из Microsoft Access

Есть ли простой способ получить DDL для создания таблиц из Microsoft Access (2007) или мне нужно самому кодировать его с помощью VBA для чтения структуры таблицы?

У меня около 30 таблиц, которые мы переносим в Oracle, и было бы легче, если бы мы могли создавать таблицы из определений Access.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
18
0
22 063
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Я сделал это:

Есть инструмент для увеличения размера Access до SQL Server. Сделайте это, а затем используйте отличные инструменты SQL Server для создания сценария.

http://support.microsoft.com/kb/237980

@iDevlop - Это относится к ЯВЛЯЕТСЯ, но, возможно, я неправильно это объяснил. Исходный вопрос спрашивает, есть ли способ создать сценарий или он должен быть написан вручную. Если вы последуете моим инструкциям, вы позволите MS SQL Server сгенерировать сценарий за вас. Вам все равно придется вручную настраивать его для доступа, но трюк с SQL Server поможет вам на 90%.

Corey Trager 10.09.2009 06:08

Вы можете использовать функцию экспорта в Access для экспорта таблиц в источник данных ODBC. Настройте источник данных ODBC для базы данных Oracle, затем щелкните правой кнопкой мыши таблицу на вкладке «Таблицы» Access и выберите экспорт. ODBC - это один из «форматов файлов» - тогда он вызывает обычный диалог ODBC.

Да! Оно работает. Требуется немного терпения, пока вы не получите сообщение «Успешно экспортировано 'tablename'». Я успешно экспортировал таблицу в Sqlite3 и Firebird. Что ж, ни в одно из полей новой таблицы не было добавлено даже ограничение «NOT NULL». Поэтому в обеих целевых базах данных я скопировал DDL, удалил таблицу, отредактировал DDL и затем заново создал таблицу с дополнительными ограничениями.

Dobedani 13.11.2018 13:32
Ответ принят как подходящий

Спасибо за другие предложения. Пока я ждал, я написал для этого код VBA. Это не идеально, но помогло мне.

Option Compare Database
Public Function TableCreateDDL(TableDef As TableDef) As String

         Dim fldDef As Field
         Dim FieldIndex As Integer
         Dim fldName As String, fldDataInfo As String
         Dim DDL As String
         Dim TableName As String

         TableName = TableDef.Name
         TableName = Replace(TableName, " ", "_")
         DDL = "create table " & TableName & "(" & vbCrLf
         With TableDef
            For FieldIndex = 0 To .Fields.Count - 1
               Set fldDef = .Fields(FieldIndex)
               With fldDef
                  fldName = .Name
                  fldName = Replace(fldName, " ", "_")
                  Select Case .Type
                     Case dbBoolean
                        fldDataInfo = "nvarchar2"
                     Case dbByte
                        fldDataInfo = "number"
                     Case dbInteger
                        fldDataInfo = "number"
                     Case dbLong
                        fldDataInfo = "number"
                     Case dbCurrency
                        fldDataInfo = "number"
                     Case dbSingle
                        fldDataInfo = "number"
                     Case dbDouble
                        fldDataInfo = "number"
                     Case dbDate
                        fldDataInfo = "date"
                     Case dbText
                        fldDataInfo = "nvarchar2(" & Format$(.Size) & ")"
                     Case dbLongBinary
                        fldDataInfo = "****"
                     Case dbMemo
                        fldDataInfo = "****"
                     Case dbGUID
                        fldDataInfo = "nvarchar2(16)"
                  End Select
               End With
               If FieldIndex > 0 Then
               DDL = DDL & ", " & vbCrLf
               End If
               DDL = DDL & "  " & fldName & " " & fldDataInfo
               Next FieldIndex
         End With
         DDL = DDL & ");"
         TableCreateDDL = DDL
End Function


Sub ExportAllTableCreateDDL()

    Dim lTbl As Long
    Dim dBase As Database
    Dim Handle As Integer

    Set dBase = CurrentDb

    Handle = FreeFile

    Open "c:\export\TableCreateDDL.txt" For Output Access Write As #Handle

    For lTbl = 0 To dBase.TableDefs.Count - 1
         'If the table name is a temporary or system table then ignore it
        If Left(dBase.TableDefs(lTbl).Name, 1) = "~" Or _
        Left(dBase.TableDefs(lTbl).Name, 4) = "MSYS" Then
             '~ indicates a temporary table
             'MSYS indicates a system level table
        Else
          Print #Handle, TableCreateDDL(dBase.TableDefs(lTbl))
        End If
    Next lTbl
    Close Handle
    Set dBase = Nothing
End Sub

Я никогда не утверждал, что я программист VB.

Я полагаю, что вы могли бы добавить: Case dbDecimal fldDataInfo = "number" в оператор case. Как я уже сказал, я не программист на VB.

Richard A 11.11.2009 05:22

Мне пришлось использовать Dim fldDef As Object (а не Field), чтобы заставить его работать в Access2007.

DJDave 22.12.2013 20:00

Вам также может потребоваться добавить ссылку на модуль, чтобы не получить ошибку «пользовательский тип не определен». Это делается в редакторе VB через путь меню Инструменты> Ссылки. В моем случае необходимый модуль - это объектная библиотека Microsoft DAO. Это было в MS Access 2016.

Justin 08.09.2018 02:52

Вы можете заглянуть в ADOX, чтобы получить информацию о схеме. Используя ADOX, вы можете получить такие вещи, как ключи, представления, отношения и т. д.

К сожалению, я не программист на VB, но в сети есть множество примеров использования ADOX для доступа к схеме таблицы.

Используйте Oracle SQL Developer Migration Workbench.

Есть полное руководство по преобразованию баз данных Access в Oracle, доступное здесь. Если вам нужны только структуры, то вы можете сосредоточиться на разделе 3.0.

Ссылка выше не работает. Это может быть полезно: oracle.com/technetwork/database/migration/access-084991.html

Somu 15.07.2014 18:59

Это больше не будет работать, SQLDeveloper использует java 8, который не поддерживает мост ODBC.

notzippy 19.05.2015 19:57

Немного поздно, но я использую RazorSQL для генерации DDL для баз данных Access.

Другие вопросы по теме