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


Я сделал это:
Есть инструмент для увеличения размера Access до SQL Server. Сделайте это, а затем используйте отличные инструменты SQL Server для создания сценария.
http://support.microsoft.com/kb/237980
Вы можете использовать функцию экспорта в Access для экспорта таблиц в источник данных ODBC. Настройте источник данных ODBC для базы данных Oracle, затем щелкните правой кнопкой мыши таблицу на вкладке «Таблицы» Access и выберите экспорт. ODBC - это один из «форматов файлов» - тогда он вызывает обычный диалог ODBC.
Да! Оно работает. Требуется немного терпения, пока вы не получите сообщение «Успешно экспортировано 'tablename'». Я успешно экспортировал таблицу в Sqlite3 и Firebird. Что ж, ни в одно из полей новой таблицы не было добавлено даже ограничение «NOT NULL». Поэтому в обеих целевых базах данных я скопировал DDL, удалил таблицу, отредактировал DDL и затем заново создал таблицу с дополнительными ограничениями.
Спасибо за другие предложения. Пока я ждал, я написал для этого код 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.
Мне пришлось использовать Dim fldDef As Object (а не Field), чтобы заставить его работать в Access2007.
Вам также может потребоваться добавить ссылку на модуль, чтобы не получить ошибку «пользовательский тип не определен». Это делается в редакторе VB через путь меню Инструменты> Ссылки. В моем случае необходимый модуль - это объектная библиотека Microsoft DAO. Это было в MS Access 2016.
Вы можете заглянуть в ADOX, чтобы получить информацию о схеме. Используя ADOX, вы можете получить такие вещи, как ключи, представления, отношения и т. д.
К сожалению, я не программист на VB, но в сети есть множество примеров использования ADOX для доступа к схеме таблицы.
Используйте Oracle SQL Developer Migration Workbench.
Есть полное руководство по преобразованию баз данных Access в Oracle, доступное здесь. Если вам нужны только структуры, то вы можете сосредоточиться на разделе 3.0.
Ссылка выше не работает. Это может быть полезно: oracle.com/technetwork/database/migration/access-084991.html
Это больше не будет работать, SQLDeveloper использует java 8, который не поддерживает мост ODBC.
Немного поздно, но я использую RazorSQL для генерации DDL для баз данных Access.
@iDevlop - Это относится к ЯВЛЯЕТСЯ, но, возможно, я неправильно это объяснил. Исходный вопрос спрашивает, есть ли способ создать сценарий или он должен быть написан вручную. Если вы последуете моим инструкциям, вы позволите MS SQL Server сгенерировать сценарий за вас. Вам все равно придется вручную настраивать его для доступа, но трюк с SQL Server поможет вам на 90%.