IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Générer le code SQL d'une table


Sujet :

Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Gestionnaire de données
    Inscrit en
    Mars 2006
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestionnaire de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 356
    Par défaut Générer le code SQL d'une table
    Bonjour,

    Je dispose d'une table Access.

    Je voudrais récupérer le code SQL relatif à la création de cette table
    ( exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    -- =========================================================
    --   Table : MA_TABLE
    -- ============================================================
    create table MA_TABLE
    (
        CHB_ID               INTEGER               not null,
        CHB_NUMERO           SMALLINT              not null,
        CHB_ETAGE            CHAR(3)                       ,
        CHB_BAIN             NUMERIC(1)            not null        default 0,
        CHB_DOUCHE           NUMERIC(1)            not null        default 1,
        CHB_WC               NUMERIC(1)            not null        default 1,
        CHB_COUCHAGE         SMALLINT              not null,
        CHB_POSTE_TEL        CHAR(3)                       ,
        primary key (CHB_ID)
    );
    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Je ne pense pas que ce soit possible, de mémoire la question avait été posé il y a fort longtemps.

    Philippe

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Par défaut
    Bonsoir,
    en voilà une bonne idée.
    Il faut une moulinette VBA pour récupérer le script sql de création des tables.
    Lister les TableDefs, Fields, Indexes et Relations. Il faudrait également un tableau de correspondance des data type et pourquoi pas une table de correspondance pour d'autres SGBD.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Public Function GetScriptSQL() as String
     Dim LDB As DAO.Database
     Dim TBL As DAO.TableDef
     Dim FLD As DAO.Field
     Dim IND As DAO.Index
     Dim REL As DAO.Relation
     Dim DataTypes As Collection
    Set DataTypes = New Collection
    DataTypes.Add Key:=CStr(1), Item:="BIT"
    DataTypes.Add Key:=CStr(2), Item:="TINYINT"
    DataTypes.Add Key:=CStr(3), Item:="SMALLINT"
    DataTypes.Add Key:=CStr(4), Item:="INTEGER"
    DataTypes.Add Key:=CStr(5), Item:="CURRENCY"
    DataTypes.Add Key:=CStr(6), Item:="SINGLE"
    DataTypes.Add Key:=CStr(7), Item:="DOUBLE"
    DataTypes.Add Key:=CStr(8), Item:="DATE"
    DataTypes.Add Key:=CStr(9), Item:="BINARY"
    DataTypes.Add Key:=CStr(10), Item:="VARCHAR"
    DataTypes.Add Key:=CStr(11), Item:="LONGBINARY"
    DataTypes.Add Key:=CStr(12), Item:="LONGCHAR"
    DataTypes.Add Key:=CStr(15), Item:="GUID"
    DataTypes.Add Key:=CStr(16), Item:="BIGINT"
    DataTypes.Add Key:=CStr(17), Item:="VARBINARY"
    DataTypes.Add Key:=CStr(18), Item:="CHAR"
    DataTypes.Add Key:=CStr(19), Item:="NUMERIC"
    DataTypes.Add Key:=CStr(20), Item:="NUMERIC"
    DataTypes.Add Key:=CStr(21), Item:="DOUBLE"
    DataTypes.Add Key:=CStr(22), Item:="TIME"
    DataTypes.Add Key:=CStr(23), Item:="TIMESTAMP"
    DataTypes.Add Key:=CStr(24), Item:="VARBINARY"
    DataTypes.Add Key:=CStr(101), Item:="LONGBINARY"
     Dim Script As String
     Dim Fk_fld As String
     Dim Fk_src As String
     Set LDB = CurrentDb
     For Each TBL In LDB.TableDefs
       If (TBL.Attributes And (dbSystemObject Or dbAttachedTable)) = 0 Then
           Script = Script & "CREATE TABLE " & TBL.Name & vbCrLf & "(" & vbCrLf
           For Each FLD In TBL.Fields
              Script = Script & vbTab & FLD.Name & vbTab & DataTypes(CStr(FLD.Type)) & IIf(FLD.Type = 10 Or FLD.Type = 18, "(" & FLD.Size & ")", "") & IIf(FLD.Required, vbTab & "NOT NULL", "") & IIf(Len(FLD.DefaultValue) > 0, vbTab & "DEFAULT VALUE " & FLD.DefaultValue, "") & "," & vbCrLf
           Next
           For Each IND In TBL.Indexes
              If (IND.Name = "PrimaryKey") Then
                Script = Script & vbTab & "PRIMARY KEY ("
                For Each FLD In IND.Fields
                   Script = Script & FLD.Name & ", "
                Next
                Script = Left(Script, Len(Script) - 2) & ")" & vbCrLf
              End If
           Next
           Script = Script & ");" & vbCrLf & vbCrLf
       End If
     Next
     For Each REL In LDB.Relations
       Script = Script & "ALTER TABLE " & REL.ForeignTable & " ADD CONSTRAINT " & REL.Name
       Fk_fld = ""
       Fk_src = ""
       For Each FLD In REL.Fields
         Fk_fld = Fk_fld & FLD.Name & ", "
         Fk_src = Fk_src & FLD.ForeignName & ", "
       Next
       Script = Script & " FOREIGN KEY (" & Left(Fk_fld, Len(Fk_fld) - 2) & ")"
       Script = Script & " REFERENCES " & REL.table & "(" & Left(Fk_src, Len(Fk_src) - 2) & ");" & vbCrLf
     Next
     LDB.Close
     Set LDB = Nothing
     GetScriptDSQL = Script
    End Function

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Excellente idée, ce que je voulais dire c'est qu'il n'y a pas de fonction native, contrairement aux requêtes crées en mode graphique dont on peut récupérer le code SQL.

    Philippe

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Merci ilank,

    J’ai souvent regretté qu'une telle fonction n'était pas disponible.
    As-tu, sous la main l'équivalent pour d'autres objets (Formulaires, Etats, Macro, Module) ?


    Une faute de frappe :

    GetScriptDSQL = Script ---> GetScriptSQL = Script

Discussions similaires

  1. Afficher le code SQL d'une table access | Possible ? |
    Par beegees dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 18/01/2019, 16h30
  2. Afficher le code SQL d'une table MYSQL : Possible ?
    Par beegees dans le forum Débuter
    Réponses: 2
    Dernier message: 24/11/2008, 14h29
  3. PL/SQL Partager une table PL/SQL... possible ?
    Par Yorglaa dans le forum PL/SQL
    Réponses: 35
    Dernier message: 16/02/2004, 08h56
  4. [SQL] Remplacer une table
    Par rstephane dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/05/2003, 17h10
  5. Réponses: 2
    Dernier message: 26/02/2003, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo