来自Microsoft Access的表创建DDL



有没有简单的方法可以从Microsoft Access(2007)中检索表创建DDL,或者我必须使用VBA自己编写代码来读取表结构?

我有大约30个表,我们正在移植到Oracle,如果我们可以从Access定义中创建这些表,这将使生活更轻松。

感谢您的其他建议。在我等待的时候,我写了一些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:exportTableCreateDDL.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程序员。

我已经做到了:

有一个工具可以从Access"升级"到SQL Server。执行此操作,然后使用优秀的SQL Server工具生成脚本。

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

使用Oracle的SQL Developer迁移工作台。

这里有一个关于将Access数据库转换为Oracle的完整教程。如果这只是你想要的结构,那么你可以专注于第3.0节。

您可以使用Access中的导出功能将表导出到ODBC数据源。将ODBC数据源设置为Oracle数据库,然后右键单击Access"Tables"选项卡中的表并选择导出。ODBC是"文件格式"之一,然后它将显示通常的ODBC对话框。

您可能需要查看ADOX以获取架构信息。使用ADOX,您可以获得密钥、视图、关系等。

不幸的是,我不是一名VB程序员,但网上有很多使用ADOX获取表格模式的例子。

派对有点晚,但我使用RazorSQL为Access数据库生成DDL。

最新更新