首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Microsoft Access创建表DDL

从Microsoft Access创建表DDL
EN

Stack Overflow用户
提问于 2008-10-06 00:19:54
回答 6查看 23.2K关注 0票数 19

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

我有大约30个要移植到Oracle的表,如果我们可以从Access定义创建表,这将使工作变得更容易。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-10-06 02:12:01

谢谢你的其他建议。在我等待的时候,我写了一些VBA代码来做这件事。它不是完美的,但为我做了这件事。

代码语言:javascript
复制
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程序员。

票数 23
EN

Stack Overflow用户

发布于 2008-10-06 00:30:38

我已经这样做了:

有一个从Access到SQL Server的“升迁”工具。这样做,然后使用优秀的SQL Server工具来生成脚本。

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

票数 4
EN

Stack Overflow用户

发布于 2008-10-06 15:08:48

使用Oracle的SQL开发人员迁移工作台。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/172895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档