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

Modélisation Discussion :

[AC-2013] Création des champs d'une table à partir d'une liste créée dans une autre table


Sujet :

Modélisation

  1. #1
    Membre régulier
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    Septembre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 98
    Points : 76
    Points
    76
    Par défaut [AC-2013] Création des champs d'une table à partir d'une liste créée dans une autre table
    Bonjour,

    Comme je suis (un peu) feignante et tête en l'air, j'aimerai savoir s'il est possible de créer une table dont les champs seraient issus des valeurs d'une autre table.

    Je m'explique.
    J'ai une table (Tbl_ListeCaracteristiques) qui contient la liste de toutes les caractéristiques susceptibles de décrire des optiques: (IdCaracteristique, NomCaracteristique).

    Exemple
    IdCaracteristique NomCaracteristique
    1 V
    2 W
    3 X
    4 Y
    5 Z

    Et je voudrai pouvoir créer la table suivante:

    ... ... ... V W X Y Z
    ... ... a b c d e f
    ... ... ...
    Où les caractéristiques de ma liste sont devenues des champs de ma nouvelle table.

    J'entrevoie que, si c'est possible, il va falloir que je définisse les propriétés de mes champs, mais ça ne pose pas de soucis de les ajouter dans ma première table "ListeCaracteristiques".

    Donc est-ce possible? Et comment?

    Merci d'avance de votre aide et n'hésitez pas à me dire si c'est pas clair

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 846
    Points : 7 983
    Points
    7 983
    Par défaut
    Bonjour,

    Je te propose le tuto de Christophe Warin ci-joint qui permet de créer une table en DAO.
    Il faudrait rajouter une boucle des enregistrements de ta table initiale pour l'ajout des champs.

    Par contre, je n'ai pas compris le but, parce que ce genre de truc est exceptionnel dans une application. Surtout si tu veux y rajouter des données après ?

    Cordialement,

  3. #3
    Membre régulier
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    Septembre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 98
    Points : 76
    Points
    76
    Par défaut
    Merci pour la réponse rapide, je vais lire ce petit tuto (en plus je l'avais déjà imprimé, mais pas tout lu )

    En fait mes optiques sont définies par des caractéristiques diverses et variées qui dépendent du type d'optiques. Pour tous les type d'optiques, toutes les caractéristiques apparaissent dans ma base, mais certains champs ne sont pas renseignés car inintéressants pour ce type d'optique.

    Exemple:

    Les caractéristiques intéressantes pour un miroir plan seront, pour simplifier, sa taille et le traitement. Pour une lentille il faudra ajouter la distance focale (donnée sans intérêt pour mon miroir plan).
    Or j'ai peut-être oublié certains types d'optique dans ma base, ou alors je voudrai en rajouter plus tard, et pour ces optiques, des caractéristiques importantes n'auront pas été prévues. Et j'aimerai les ajouter simplement à ma base sans avoir à entrer dans mes tables. L'intérêt est aussi que si c'est possible, j'espère que ça va m'aider à la création d'un formulaire avec lequel je me bats depuis pas mal de temps (mais pas clair dans ma tête encore, j'espère que ça ira mieux après ça ^^)

    Bref j'explore des pistes et j'essaye d'apprendre et de comprendre pour adapter à mes idées (un peu saugrenues sans doute, surtout pour une débutante comme moi... Mais c'est peut-être parce que je débute que j'ai ces idées... Bref) Merci encore!

  4. #4
    Membre régulier
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    Septembre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 98
    Points : 76
    Points
    76
    Par défaut
    Merci pour ce tuto qui répond parfaitement à ma question.

    Je me permets de continuer la discussion pour approfondir. Je sais qu'il s'agit plus d'IHM, donc dites moi s'il vaut mieux que je crée un autre sujet...
    Voilà maintenant que je sais ajouter des champs dans une table, j'aimerai pouvoir ajouter ces champs automatiquement (car oui je suis feignante jusqu'au bout).

    J'ai donc créé un formulaire qui me permet d'entrer mes nouvelles caractéristiques (V,W,X,....). Dans ce formulaire, j'ai ajouté un bouton.
    Le but de ce bouton est d'ajouter la nouvelle caracteristique (T par exemple) à une autre table que j'ai appelé Tbl_Truc ([IdTruc],[NomTruc],[V],[W],[x],...).

    Je peux donc utiliser la fonction CreateField, mais j'aimerai récupérer la chaine de caractères que je viens d'entrer... J'imagine que je peux utiliser la propriété "Value", mais je vois pas trop comment... Je continue de fouiller, mais si quelqu'un peu m'aider, tant mieux.

  5. #5
    Membre régulier
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    Septembre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 98
    Points : 76
    Points
    76
    Par défaut
    Bon j'ai trouvé ma solution, je suis toute fière:

    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
    Dim oDb As DAO.Database
    Dim oTbl As DAO.TableDef
    Dim oFld As DAO.Field
    Dim oRst As DAO.Recordset
    Set oDb = CurrentDb
    Set oTbl1 = oDb.TableDefs("Tbl_Trucs")
    Set oRst = oDb.OpenRecordset("Tbl_ListeCaracteristiques", dbOpenSnapshot)
     
    'Etape 1: Récupérer le nom du futur champ
    NomChamp = Me.Controls("NomCaracteristique").Value
     
    'Etape 2: Créer le champ
    Set oFld = oTbl.CreateField(NomChamp, dbText)
     
    'Etape3: Définir les propriétés
    oFld.AllowZeroLength = True 'Chaine vide autorisée
    oFld.Required = False 'Nul autorisé
     
    'Etape 4: Ajout du champ à la table
    oTbl.Fields.Append oFld
     
    'Rafraîchit la collection
    oTbl.Fields.Refresh
     
    Set oDb = Nothing
    Set oTbl = Nothing
    Set oRst = Nothing
    Merci au tuto de Christophe Warin qui m'a énormément aidé (et sur lequel j'ai pompé une partie du code )
    N'hésitez pas si vous avez des remarques sur ce code (comme je débute, il y a probablement des choses à améliorer)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/06/2014, 15h14
  2. Réponses: 0
    Dernier message: 03/02/2013, 00h03
  3. Réponses: 2
    Dernier message: 07/12/2007, 16h20
  4. Réponses: 3
    Dernier message: 30/04/2007, 13h22
  5. Réponses: 1
    Dernier message: 15/04/2007, 21h09

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