2008-10-06 8 views
12

Existe-t-il un moyen simple de récupérer le DDL de création de table à partir de Microsoft Access (2007) ou dois-je le coder moi-même en utilisant VBA pour lire la structure du tableau?Création de table DDL à partir de Microsoft Access

J'ai environ 30 tables que nous portons à Oracle et cela faciliterait la vie si nous pouvions créer les tables à partir des définitions Access.

Répondre

17

Merci pour les autres suggestions. Pendant que j'attendais, j'ai écrit du code VBA pour le faire. Ce n'est pas parfait, mais j'ai fait le travail pour moi.

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 

Je n'ai jamais prétendu être programmeur VB.

+0

ne fonctionne pas avec les champs décimaux – Peter

+0

Je suppose que vous pourriez ajouter: cas dbDecimal fldDataInfo = « nombre » dans la déclaration de cas. Comme je l'ai dit, je ne suis pas programmeur VB. –

+0

J'ai dû utiliser Dim fldDef As Object (pas Field) pour le faire fonctionner dans Access2007 – DJDave

2

Je l'ai fait:

Il y a un outil pour "upsizing" de l'accès à SQL Server. Faites cela, puis utilisez les excellents outils SQL Server pour générer le script.

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

+0

ce n'est pas pertinent! –

+1

@iDevlop - Il * EST * pertinent, mais peut-être que je ne l'ai pas expliqué correctement. La question initiale demande s'il existe un moyen de créer un script ou doit-il être écrit à la main. Si vous suivez mes instructions, vous laissez MS SQL Server générer le script pour vous. Vous devrez toujours le modifier à la main pour Access, mais l'astuce de SQL Server vous permettra d'atteindre 90%. –

0

Vous pouvez utiliser la fonction d'exportation dans Access pour exporter des tables à une source de données ODBC. Définissez une source de données ODBC dans la base de données Oracle, puis cliquez avec le bouton droit sur la table dans l'onglet Access "Tables" et choisissez l'exportation. ODBC est l'un des "formats de fichier" - il fera alors apparaître le dialogue ODBC habituel.

1

Vous pouvez rechercher dans ADOX pour obtenir les informations de schéma. En utilisant ADOX vous pouvez obtenir des choses telles que les clés, vues, relations, etc.

Malheureusement, je ne suis pas un programmeur VB, mais il y a beaucoup d'exemples sur le web utilisant ADOX pour obtenir le schéma de la table.

2

Utilisez SQL Developer Migration Workbench d'Oracle.

Il existe un tutoriel complet sur la conversion des bases de données Access en Oracle disponible here. Si c'est seulement les structures que vous recherchez, alors vous pouvez vous concentrer sur la section 3.0.

+0

Le lien ci-dessus est cassé. Cela peut être utile: http://www.oracle.com/technetwork/database/migration/access-084991.html – Somu

+0

Cela ne fonctionnera plus, SQLDeveloper utilise java 8, qui ne supporte pas le pont ODBC. – notzippy

0

Un peu en retard à la fête, mais j'utilise RazorSQL pour générer des DDL pour les bases de données Access.

Questions connexes