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 :

Changer la structure d'une table


Sujet :

Access

  1. #1
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut Changer la structure d'une table
    Bonjour,

    Voici mon problème:

    J'ai hérité d'une table décrivant des personnes contenant des champs et notament un champs clé numéro de la personne (unique) et un champ où l'on a rentré les aliments préférés de la personne en question. Le problème c'est que les aliments sont mis les uns derrière les autres et séparé par une virgule ex: banane, pomme,...
    J'aimerai savoir si on peut avec un programme VBA faire une table qui serait jointe avec la première (clé : numéro de la personne) (relation 1:n) et dans laquelle je pourrait, après séparation des différents aliments, les mettres individuellement.

    Merci d'avance pour toute idée et conseil !
    Et surtout bon week end

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,


    Que penses tu de qqchose comme ça :

    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
     
    Dim TDF As DAO.TableDef
    Dim Champ As DAO.Field
    Dim Db As DAO.Database
    Dim Rs As DAO.Recordset
    Dim Rs2 As DAO.Recordset
    Dim I As Integer
    Dim Compteur As Integer
    Set Db = CurrentDb
     
    'création de la table
    Set TDF = Db.CreateTableDef("preferance")
     
    Set Champ = TDF.CreateField("ID_MEC", dbLong)
    TDF.Fields.Append Champ
    Set Champ = TDF.CreateField("aliment", dbText)
    TDF.Fields.Append Champ
    Db.TableDefs.Append TDF
    Dim List() As String
     
     
    Set Db = Nothing
    Set TDF = Nothing
    Set Champ = Nothing
    Set Rs = CurrentDb.OpenRecordset("existant", dbOpenDynaset)
    Set Rs2 = CurrentDb.OpenRecordset("preferance", dbOpenDynaset)
    If Rs.EOF = False Then
        Do Until Rs.EOF = True
            If Len(Rs("ALIMENT") & "") <> 0 Then
                List = Split(Rs("ALIMENT"), ", ")
                I = 1
                Compteur = 0
                Do Until InStr(I, Rs("ALIMENT"), ", ") = 0
                    Compteur = Compteur + 1
                    I = I + Len(List(I)) + 2
                Loop
     
                For I = 0 To Compteur
                    Rs2.AddNew
                        Rs2("ID_mec") = Rs("id")
                        Rs2("aliment") = List(I)
                    Rs2.Update
     
     
                Next
            End If
            Rs.MoveNext
     
        Loop
    End If
    Set Rs = Nothing
    Set Rs2 = Nothing
    A partir d'une table "existante", tu crée une table "preferance" contenant les champ "ID_mec" et "Aliment". Ces champs sont remplis avec les données de la table "existante"

    A+

  3. #3
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Merci pour tout ça !!!

    Je vais tester lundi matin et je te tiens au jus...Par contre une petite question qui va te paraître stupide: j'ai l'habitude de mettre du code VBA pour mes formulaires et seulement pour eux, alors ou est ce que je mets celui ci ??? Et comment je vais le lancer ???

    Merci pour ta patience

    Bon week end

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Dans l'editeur Visual Basic , tu insères un module dans lequel tu va écrire tes routines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Sub NomRoutine
     
    End Sub
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Function NomFonction() As String
     
    End Function
    l'appel se fait par Call NomRoutine depuis le formulaire ou une autre partie des modules

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 081
    Points : 24 724
    Points
    24 724
    Par défaut
    Si c'est pour une utilisation unique (et donc jetable) on peut toujours l'appeler directement depuis la fenetre de debogage.

    Comme ceci

    Cordialement,

  6. #6
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Bonjour,

    Merci à ceux qui ont pris de leur temps pour me répondre.
    Le code à une petite erreur (je crois !):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Do Until (InStr(I, Rs("Q110LesQuelsTabouAvAcouch"), ", ") = 0)
                        Compteur = Compteur + 1
                        I = I + Len(List(Compteur)) + 2
    Loop
    A l'origine c'était
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    I = I + Len(List(I)) + 2
    Bon ça étant réglé j'ai un autre soucis. en effet la condition de sortie de la boucle n'est jamais vérifiée. Dans ma table source (celle qui sert à créer l'autre) la première chaine traitée est : Lentilles, ailes de poulet, poisson

    Or arrivé à la deuxième virgule, le:

    I= 27 ce qui est normal

    InStr(I, Rs("Q110LesQuelsTabouAvAcouch"), ", ") = 27 or il devrait afficher 0 puisque qu'on est à la fin de la chaîne !!!


    Avez vous une idée ?

    D'avance merci

  7. #7
    Invité
    Invité(e)
    Par défaut


    Bon ça étant réglé j'ai un autre soucis. en effet la condition de sortie de la boucle n'est jamais vérifiée.
    Bien sure que si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do Until (InStr(I, Rs("Aliment"), ", ") = 0)
    sert à ça !

    Je ne comprends pas ou est le problème, Muhad'hib t'as donné le bon code !?

  8. #8
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Salut,

    Effectivement il y a une condition de sortie, mais elle ne se vérifie pas. Je mets des espions sur la condition et à partir de la deuxième virgule I passe de 18 à 27 alors InStr(...) devrait changer et se mettre =0 puisqu'après il n'y a plus de virgule et bien tu me croira ou pas mais il ne change pas. J'ai beau regarder la boucle dans tous les sens, la doc etc...Je comprends rien.

    Pour Muhad'hib voici le fichier...
    Fichiers attachés Fichiers attachés

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Re,

    Il y avais effectivement une erreur

    Je comprend pas comment ça a pu fonctionner lors de mon test mais bon ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                Do Until InStr(I, Rs("Q110LesQuelsTabouAvAcouch"), ", ") = 0
     
                    I = I + Len(List(Compteur)) + 2
                    Compteur = Compteur + 1
                Loop

    A+

  10. #10
    Membre du Club Avatar de ip203
    Inscrit en
    Mars 2002
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 132
    Points : 59
    Points
    59
    Par défaut


    Pour une fois que j'arrive à trouver un bug et c'est en plus pas sur mon code !!!
    En tout cas grand merci !!!

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

Discussions similaires

  1. [MySQL] Changer structure d'une table
    Par jackvabre dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/04/2011, 10h23
  2. lister la structure d'une table
    Par Maitre B dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/09/2004, 11h43
  3. [SQL Access] Modifier la structure d'une table
    Par Le Lézard dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/06/2004, 15h03
  4. Réponses: 7
    Dernier message: 18/06/2004, 10h58
  5. Lister la structure d'une table
    Par TMuet dans le forum SQL
    Réponses: 2
    Dernier message: 29/12/2003, 18h56

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