有没有简单的方法从Microsoft Access(2007)检索表创建DDL,还是我必须使用VBA自己编写代码才能读取表结构?
我有大约30个表,我们正在移植到Oracle,如果我们可以从Access定义创建表,它将使生活更轻松。
答案 0 :(得分:19)
感谢其他建议。在我等待的时候,我写了一些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程序员。
答案 1 :(得分:3)
我做到了这一点:
有一种从Access升级到SQL Server的工具。这样做,然后使用优秀的SQL Server工具生成脚本。
答案 2 :(得分:2)
使用Oracle的SQL Developer Migration Workbench。
有一个关于将Access数据库转换为Oracle的完整教程here。如果它只是你所追求的结构,那么你可以专注于3.0节。
答案 3 :(得分:1)
您可以使用Access中的导出功能将表导出到ODBC数据源。设置ODBC数据源到Oracle数据库,然后右键单击Access“Tables”选项卡中的表并选择export。 ODBC是“文件格式”之一 - 它将打开通常的ODBC对话框。
答案 4 :(得分:1)
您可能需要查看ADOX以获取架构信息。使用ADOX,您可以获得诸如键,视图,关系等内容。
不幸的是我不是VB程序员,但是网上有很多使用ADOX来获取表模式的例子。
答案 5 :(得分:0)
派对有点晚了,但我使用RazorSQL为Access数据库生成DDL。