2008-10-06 25 views
12

Gibt es eine einfache Möglichkeit, Tabellenerstellungs-DDL von Microsoft Access (2007) abzurufen, oder muss ich es selbst codieren, das VBA verwendet, um die Tabellenstruktur zu lesen?Tabellenerstellungs-DDL von Microsoft Access

Ich habe etwa 30 Tabellen, die wir auf Oracle portieren, und es würde das Leben einfacher machen, wenn wir die Tabellen aus den Access-Definitionen erstellen könnten.

Antwort

17

Danke für die anderen Vorschläge. Während ich wartete, schrieb ich etwas VBA-Code, um es zu tun. Es ist nicht perfekt, aber hat den Job für mich gemacht.

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 

Ich habe nie behauptet, VB-Programmierer zu sein.

+0

arbeiten nicht für Dezimalfeldern – Peter

+0

Ich könnte mir vorstellen, dass man hinzufügen könnte: Fall dbDecimal fldDataInfo = „number“ in die Case-Anweisung. Wie gesagt, ich bin kein VB-Programmierer. –

+0

Ich musste Dim FldDef As Object (nicht Field) verwenden, um es in Access2007 – DJDave

2

Ich habe dies getan:

ein Werkzeug für "upsizing" Es gibt von Zugriff auf SQL-Server. Tun Sie das und verwenden Sie dann die ausgezeichneten SQL Server-Tools, um das Skript zu generieren.

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

+0

dies ist nicht relevant! –

+1

@iDevlop - Es * IS * relevant, aber vielleicht habe ich es nicht richtig erklären. Die ursprüngliche Frage fragt, ob es eine Möglichkeit gibt, ein Skript zu erstellen, oder ob es manuell geschrieben werden muss. Wenn Sie meinen Anweisungen folgen, lassen Sie MS SQL Server das Skript für Sie generieren. Sie müssen es immer noch manuell für Access anpassen, aber der SQL Server-Trick wird Sie zu 90% bringen. –

0

Sie können die Exportfunktion in Access verwenden, um Tabellen zu einer ODBC-Datenquelle zu exportieren. Richten Sie eine ODBC-Datenquelle für die Oracle-Datenbank ein und klicken Sie dann mit der rechten Maustaste auf die Tabelle im Tab "Tabellen" von Access und wählen Sie "Exportieren". ODBC ist eines der "Dateiformate" - es wird dann den üblichen ODBC-Dialog aufrufen.

1

Sie möchten vielleicht in ADOX nach den Schemainformationen suchen. Mit ADOX können Sie Dinge wie die Tasten, Ansichten, Beziehungen, etc.

Leider bin ich kein VB-Programmierer, aber es gibt viele Beispiele im Web mit ADOX, um am Tabellenschema zu bekommen.

2

Verwenden Sie die SQL Developer Migration Workbench von Oracle.

Es gibt eine vollständige Anleitung zum Konvertieren von Access-Datenbanken in Oracle verfügbar here. Wenn es nur die Strukturen sind, nach denen Sie suchen, dann können Sie sich auf Abschnitt 3.0 konzentrieren.

+0

arbeiten zu funktionieren Der obige Link ist gebrochen. Dies könnte hilfreich sein: http://www.oracle.com/technetwork/database/migration/access-084991.html – Somu

+0

Das wird nicht mehr funktionieren, SQLDeveloper verwendet Java 8, die keine ODBC-Brücke unterstützt. – notzippy

0

Ein bisschen spät auf die Party, aber ich benutze RazorSQL, um DDL für Access-Datenbanken zu generieren.