2008-10-06 17 views
12

¿Hay alguna manera fácil de recuperar DDL de creación de tablas de Microsoft Access (2007) o tengo que codificarlo usando VBA para leer la estructura de la tabla?Creación de tablas DDL de Microsoft Access

Tengo alrededor de 30 tablas que estamos migrando a Oracle y facilitaría la vida si pudiéramos crear las tablas a partir de las definiciones de acceso.

Respuesta

17

Gracias por las otras sugerencias. Mientras esperaba, escribí algunos códigos VBA para hacerlo. No es perfecto, pero hizo el trabajo por mí.

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 

Nunca dije ser el programador de VB.

+0

que no trabaja para campos decimales – Peter

+0

Me imagino que se podría añadir: Caso dbDecimal fldDataInfo = "número" en la declaración de caso. Como dije, no soy programador de VB. –

+0

Tuve que usar Dim fldDef como objeto (no de campo) para que funcione en Access2007 – DJDave

2

he hecho esto:

Hay una herramienta para "convertir a SQL Server" de acceso a SQL Server. Haga eso, luego use las excelentes herramientas de SQL Server para generar el script.

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

+0

¡No tiene relevancia! –

+1

@iDevlop - Es * ES * relevante, pero tal vez no lo explique bien. La pregunta original pregunta si hay una forma de crear un script o debe escribirse a mano. Si sigue mis instrucciones, deje que MS SQL Server genere el script para usted. Todavía tendrá que ajustarlo a mano para Access, pero el truco de SQL Server lo llevará al 90% allí. –

0

Puede utilizar la función de exportación en el Acceso a exportar tablas a una fuente de datos ODBC. Configure una fuente de datos ODBC en la base de datos Oracle y luego haga clic con el botón derecho en la tabla en la pestaña "Tablas" de acceso y elija exportar. ODBC es uno de los "formatos de archivo"; luego mostrará el cuadro de diálogo ODBC habitual.

1

Es posible que desee examinar ADOX para obtener la información del esquema. Usando ADOX puedes obtener cosas como las teclas, vistas, relaciones, etc.

Lamentablemente no soy un programador de VB, pero hay muchos ejemplos en la web que usan ADOX para obtener el esquema de la tabla.

2

Utilice SQL Developer Migration Workbench de Oracle.

Hay un tutorial completo sobre la conversión de bases de datos de Access a Oracle disponible here. Si solo buscas las estructuras que buscas, entonces puedes concentrarte en la sección 3.0.

+0

El enlace de arriba está roto. Esto podría ser útil: http://www.oracle.com/technetwork/database/migration/access-084991.html – Somu

+0

Eso ya no funcionará, SQLDeveloper usa java 8, que no admite el puente ODBC. – notzippy

0

Un poco tarde para la fiesta, pero utilizo RazorSQL para generar bases de datos de DDL para Access.

Cuestiones relacionadas