Table Creation DDL from Microsoft Access

后端 未结 6 1730
梦谈多话
梦谈多话 2020-12-25 14:46

Is there any easy way to retrieve table creation DDL from Microsoft Access (2007) or do I have to code it myself using VBA to read the table structure?

I have about

6条回答
  •  心在旅途
    2020-12-25 14:59

    Thanks for the other suggestions. While I was waiting I wrote some VBA code to do it. It's not perfect, but did the job for me.

    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
    

    I never claimed to be VB programmer.

提交回复
热议问题