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 :

Créer une table en VBA ?


Sujet :

Access

  1. #1
    Débutant
    Inscrit en
    Août 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 82
    Points : 61
    Points
    61
    Par défaut Créer une table en VBA ?
    Bonjour à tous,

    Je cherche à créer une table voire plusieurs (selon ce que veut rajouter l'utilisateur) et les lier à une table principale par une relation "1 à oo".

    J'aimerais que cela se fasse via un bouton

    Je ne sais pas comment faire ?

    Je sais coder le bouton sur l'évènement "OnClick" mais ne sait pas comment ajouter une table et y insérer des champs ??


    PS : j'ai cherché dans la FAQ, et la Recherche Avancée mais je n'ai trouvé que la possibilité de supprimer une table en VBA !!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 66
    Points : 58
    Points
    58
    Par défaut
    Bonjour

    Moi je sais juste créer une table via vba, mais pas pou les relations, je te mets le bout de code correspondant quand même.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim db As DAO.Database: Set db = CurrentDb
    Dim tdf As TableDef: Set tdf = db.CreateTableDef("nom_de_la_table")
    With tdf
        .Fields.Append .CreateField("champ1", dbSingle, 7)
        .Fields.Append .CreateField("champ2", dbText, 50)
    End With
    db.TableDefs.Append tdf
    db.TableDefs.Refresh
    db.Close
    L'informatique est une science exacte au comportement aléatoire.

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Il ne faut pas oublier d'ajouter une référence Microsoft DAO à ton projet.

    Pour ce qui est des relations, c'est guère plus compliqué.
    Prenons le cas d'une table commande et d'une autre client.

    Commande(NumCommande,#IDclient)
    Client(NumClient,Nom)

    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
    69
    70
    71
    72
    73
    Sub creation_base()
    On Error Resume Next
    Dim db As DAO.Database
     
    Dim tdf As DAO.TableDef
    Dim F As DAO.Field, ind As DAO.Index
    Dim R As DAO.Relation
    Set db = CurrentDb
    'Cree la table client
        Set tdf = db.CreateTableDef("Client")
    With tdf
     
        Set F = .CreateField("NumClient", dbLong)
        'specifie un champ Num_Auto
        F.Attributes = dbAutoIncrField
        .Fields.Append F
        .Fields.Append .CreateField("Nom", dbText, 50)
        'rafraichit la collection
        .Fields.Refresh
        'Creer la clé primaire
        Set ind = .CreateIndex("PK_Client")
        ind.Fields = "NumClient"
        ind.Primary = True
        ind.Unique = True
        .Indexes.Append ind
        'rafraichit la collection
        .Indexes.Refresh
    End With
    'Ajoute la table
    db.TableDefs.Append tdf
    'Cree la table Commande
    Set tdf = db.CreateTableDef("Commande")
    With tdf
     
        Set F = .CreateField("NumCommande", dbLong)
        'specifie un champ Num_Auto
        F.Attributes = dbAutoIncrField
        .Fields.Append F
        .Fields.Append .CreateField("IDClient", dbLong)
        'rafraichit la collection
        .Fields.Refresh
        'Creer la clé primaire
        Set ind = .CreateIndex("PK_Commande")
        ind.Fields = "NumCommande"
        ind.Primary = True
        ind.Unique = True
        .Indexes.Append ind
        'rafraichit la collection
        .Indexes.Refresh
    End With
    'Ajoute la table
    db.TableDefs.Append tdf
    db.TableDefs.Refresh
    'Ajoute la relation
    Set R = db.CreateRelation("Client-Commande")
    With R
        .Table = "Client"
        .ForeignTable = "Commande"
        'CLé primaire NumClient
        Set F = R.CreateField("NumClient")
        'Clé Etrangère IDCLient
        F.ForeignName = "IDClient"
        .Fields.Append F
        .Fields.Refresh
        MsgBox .Fields.Count
        'definit la MAJ en cascade et
        'la suppression en cascade
        .Attributes = dbRelationDeleteCascade + _
          dbRelationUpdateCascade
    End With
    db.Relations.Append R
    MsgBox "fini"
    End Sub

  4. #4
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    Mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Integrateur Odoo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Supression de table :
    docmd.runsql "drop table toto"
    Le nom d'un bomerang qui ne revient pas quand on le lance ?
    Un Baton...

  5. #5
    Débutant
    Inscrit en
    Août 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    Merci à vous tous,


    Pour l'instant, je suis sur la création de table et cela ne marche pas...enfin je n'arrive pas trop !
    J'ai recopié le code suivant dans un module de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Function InsertTable()
    Dim db As DAO.Database: Set db = CurrentDb 
    Dim tdf As TableDef: Set tdf = db.CreateTableDef("nom_de_la_table") 
    With tdf 
        .Fields.Append .CreateField("champ1", dbSingle, 7) 
        .Fields.Append .CreateField("champ2", dbText, 50) 
    End With 
    db.TableDefs.Append tdf 
    db.TableDefs.Refresh 
    db.Close
    End Function
    Tout d'abord...ai-je bien fait de la mettre publique et non Private ?

    Comment l'appeler sur un bouton
    Moi j'ai fait sur l'évènement "OnClick" :
    Mais ça me met un message d'erreur :
    Object Variable ot With block Variable not set
    Sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim tdf As TableDef: Set tdf = db.CreateTableDef("nom_de_la_table")
    [/quote]

  6. #6
    Débutant
    Inscrit en
    Août 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    Tofalu, dans ton code il semble y avoi rnon seulement celui de la liaison entre 2 tables maais aussi celui de la création de table n'est-ce pas ?

    Dans ce cas : j'essaie de suite...

  7. #7
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Mon code :

    - Création des tables
    - Création des champs
    - Création des clés (index)
    - Création des relations
    - Mise en place de l'intégrité réferentielle.

  8. #8
    Débutant
    Inscrit en
    Août 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    Merci beaucoup Tofalu : ton Code fonctionne parfaitement !

    Je me posais la question cependant de la possibilité d'entrer le nom des tables à créer via une VBBox ????

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Tu peux faire comme tu souhaites un nom de table est une string, la façon dont tu crées cette string est indépendante du moteur Jet

  10. #10
    Débutant
    Inscrit en
    Août 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    J'ai réussi à crée les tables désirées...

    Désormais j'aimerais crée une nouvelle Table (ça c'est OK) et ensuite la lier à une Table existante...

    Que faudrait-il modifier dans le code pour cela ?

  11. #11
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Plutot que de demander essaye de comprendre par toi même comment cela fonction en t'aidant par exemple de l'aide. Tu crois pas que ce serait mieux pour toi ?

  12. #12
    Débutant
    Inscrit en
    Août 2003
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 82
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Tofalu
    Plutot que de demander essaye de comprendre par toi même comment cela fonction en t'aidant par exemple de l'aide. Tu crois pas que ce serait mieux pour toi ?
    Oui c'est ce ce que je fais !

    Etant donné que je ne veux créer qu'une Table (Ex : Client) et que je veux lier son ID à une Table existante : il faut que je remplace dans ton code la 2ème table Commande par ma Table existante : mais spa évident !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/03/2014, 09h07
  2. [AC-2003] Créer une table temporaire a partir d'une requête en VBA
    Par Williamm dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 23/06/2011, 08h55
  3. [VBA-A]Comment créer une table à partir d'un recordset ?
    Par NoViceDel dans le forum VBA Access
    Réponses: 22
    Dernier message: 23/05/2006, 16h10
  4. Réponses: 17
    Dernier message: 03/12/2004, 14h33
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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