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 :

Creation d'une table à partir d'un tableau


Sujet :

Access

  1. #1
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 142
    Points
    16 142
    Par défaut Creation d'une table à partir d'un tableau
    Bonjour,
    J'ai créé dans ACCESS 2003, par VBA, un tableau de n lignes et n colonnes. Ce tableau est alimenté en utilisant un recordset.
    Ma question est la suivante :
    Comment faire pour transformer ce tableau, 'virtuel', en une table ACCESS.
    Merçi d'avance pour vos réponse,
    a+
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  2. #2
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Bonjour,

    je ne suis pas sûr d'avoir tout compris, mais je crois que la solution c'est une requête (UPDATE ...), non?

    Bon courage.

  3. #3
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 142
    Points
    16 142
    Par défaut
    Bonjour,
    J'ai créer un tableau du type :
    Dim matrice(529, 10) As Variant
    J'ai alimenté ce tableau sous VBA.
    Une fois ce tableau créer, ..., je souhaite le transformer en table access.

    Une requete UPDATE ne s'utilise qu'avec des tables ou requete access je crois?
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  4. #4
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Et bien oui tu fais UPDATE sur table access avec les valeurs de ton tableau (en suppossant que tu es crée au préalable ta table) si elle est pas crée je pense que tu peux faire CREATE.

    Bon courage.

  5. #5
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 142
    Points
    16 142
    Par défaut
    Le problème est justement de créer une table ACCESS avec un tableau (Dim matrice(529, 10) As Variant)
    CREATE (sous VBA) ne cré que des tables ACCESS vides ou issues d'un fichier précis (xls, mdb). Est-ce possible d'utiliser create avec un tableau (Dim matrice(529, 10) As Variant)?
    Il me semble que UPDATE ne s'utilise qu'avec des tables et requetes ACCESS et pas avec des tableau (Dim matrice(529, 10) As Variant)
    Merçi pour tout
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  6. #6
    Membre confirmé Avatar de milia
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2006
    Messages : 481
    Points : 532
    Points
    532
    Par défaut
    Non, tu n'as pas compris, et apparement tu dois pas t'y connaître beaucoup en sql.
    Tu fais ta requête et au lieu de mettre la valeur = "bidule" tu mets la valeur = une valeur de ton tableau. Je sais plus trop comment on fait exactement, mais c'est faissable. ton table tu peut récupérer la nieme valeur donc cette nieme valeur et bien tu l'as mais dans ta table access. Le mieux c'est de mettre tout ça dans une boucle.
    Je t'explique l'algorithme avec des mots!
    Répéter tant que le tableau n'est pas vide
    requête de mise à jour d'une table access(que tu auras au préalable crée) avec la valeur n de ton tableau.
    fin répéter.

    C'est compréhensible?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 74
    Points
    74
    Par défaut
    Tu dois utiliser la fonction SQL CREATE TABLE pour créer une table par le code.

    Je prends pour acquis que la table que tu veux créer n'existe pas du tout et que les noms de ses champs sont connus à l'avance et que c'est trois colonnes de texte.

    Le code suivant fonctionne, mais n'est pas parfait. Je l'ai gardé simple pour ne pas l'allourdir encore plus. Je l'ai fait de mémoire, il se peut qu'il y ait une erreur minime ou deux.
    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
    Private MonTableau(1 to 10, 1 to 3) as String
     
    ' Créer la table, vide.
    Private Sub CreerTable()
       Dim strSQL as String
       strSQL = "CREATE TABLE MaTable " & _
                "(NomColonne1 TEXT, NomColonne2 TEXT, " & _
                "NomColonne3 TEXT " & _
                "CONSTRAINT MaTable_PK PRIMARY KEY (NomColonne1, " & _
                "NomColonne2);"
       DoCmd.SetWarnings False
       DoCmd.RunSQL strSQL
       DoCmd.SetWarnings True
    End Sub
     
    ' Remplir la table.
    Private Sub RemplirTable()
       Dim recTableau as ADODB.Recordset
       Dim strSQL as String
       ' Pour ouvrir un recordset dans le but d'ajouter des données seulement,
       '  WHERE 1=0 assure que le recordset est vide.
       strSQL = "SELECT * FROM MaTable WHERE 0=1;"
       With recTableau
          .ActiveConnection = Application.CurrentProject.Connection
          .Source = strSQL
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open
       Dim I as Integer
          For I = 1 to 10
             !NomColonne1 = MonTableau(I, 1)
             !NomColonne2 = MonTableau(I, 2)
             !NomColonne3 = MonTableau(I, 3)
             ' Si le .Update cause une erreur, enlève le. De mémoire, je ne suis pas suis de sa nécessité.
             .Update
             .MoveNext
          Next
          .Close
       End With
       Set recTableau = Nothing
    End Sub
    Cet exemple crée une table vide appelée MaTable qui contient trois champs texte appelée NomColonne1, NomColonne2, NomColonne3, dont la clef primaire est constituée des champs NomColonne1 et NomColonne2.

    Pour spécifier la longueur d'un champ texte : NomColonne1 TEXT(5).
    Pour un champ numérique long : NomColonne1 LONG.
    Pour un champ date : NomColonne1 DATETIME.

    Si tu as des questions, n'hésite pas!

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Dim matrice(529, 10) As Variant)

    ceci pose seulement un problème d'homogénéité des données
    on peut parfaitement créer une table avec un tel tableau
    encore faut il que pour chacun des champs le type soit homogène et compatible avec les types de champs d'accés
    il faut procéder ainsi
    créer une tabledef
    vérifier pour champ=1 t 10
    et pour ligne=1 to 529
    déterminer le type du champ
    ici un algo pour ... distinguez les longs dates réels ou textes
    on ajoute le champ à tabledef nom champ1, champ2..champ10
    type prédemment défini
    on met le tabledef à jour
    on finit la création de la table (voir tutorial dao)
    on y ajoute les données

    nb il serait infiniment plus simple si on connait le type de données à l'arrivée
    de disposer d'une table vierge au bon format
    d'en faire une copie sous le nom choisi
    et de la remplir avec la matrice
    Elle est pas belle la vie ?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 63
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par random
    Dim matrice(529, 10) As Variant)

    ceci pose seulement un problème d'homogénéité des données
    En effet, j'avais pas pensé que les Variant peuvent contenir Null. Il serait donc avisé d'utiliser Nz
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim I as Integer
          For I = 1 to 10
             !NomColonne1 = Nz(MonTableau(I, 1))
             !NomColonne2 = Nz(MonTableau(I, 2))
             !NomColonne3 = Nz(MonTableau(I, 3))
             ' Si le .Update cause une erreur, enlève le. De mémoire, je ne suis pas suis de sa nécessité.
             .Update
             .MoveNext
          Next
    Ce code ne prévient pas l'insertion de doublons, et utiliser des TEXT comme clef primaire, c'est pas vargeux (pardonnez l'expression bien de chez nous).

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il y a aussi une autre méthode très simple

    l'objet range excel peut recevoir un array
    donc
    création une feuille excel
    copie de l'array
    import de la feuille en création de table
    Elle est pas belle la vie ?

  11. #11
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 142
    Points
    16 142
    Par défaut
    Merçi à vous tous pour vos suggestions toutes très intéressantes,
    Je me suis sîmplifié la vie en mettant tout en string et ça marche nickel.
    Labelette ton prog marche super bien, j'ai juste fait une petite modif
    Dim I as Integer
    For I = 1 to 10
    .AddNew
    !NomColonne1 = Nz(MonTableau(I, 1))
    !NomColonne2 = Nz(MonTableau(I, 2))
    !NomColonne3 = Nz(MonTableau(I, 3))
    .Update
    Next
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

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

Discussions similaires

  1. creation d'une table à partir des valeurs de 2 tables
    Par esmarlandes dans le forum Macro
    Réponses: 2
    Dernier message: 29/01/2010, 10h55
  2. [OpenOffice][Base de données] Creation d'une table a partir d'un fichier writer
    Par Darki03 dans le forum OpenOffice & LibreOffice
    Réponses: 0
    Dernier message: 13/05/2009, 13h04
  3. Creation d'une table avec plusieurs clés
    Par mic79 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 21/06/2005, 12h17
  4. Réponses: 2
    Dernier message: 02/11/2004, 13h38
  5. Réponses: 4
    Dernier message: 26/08/2004, 09h01

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