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

Requêtes et SQL. Discussion :

transfert d'une table vers 3 tables differentes


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut transfert d'une table vers 3 tables differentes
    Bonjour,

    j'ai une table qui contient 12 champs differents que je voudrais la parcourire ligne par ligne est mettre les champs et la repartir sur 3 tables differents .
    sachant que dans la 2eme table j'ai une clé étrangere qui est l'ID de la 1ere table et idem pour la 3eme table avec l'Id de la 2éme .

    Merci de vos Reponse .

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Avec un petit exemple, ce serait plus compréhensible

    Règles du forum Langage SQL à lire par tous
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    Enfet je suis sur un projet en Access je recupere des infos depuis une feuille excel que je stock dans une table_temporaire.

    est ce qu'il ya moyen de faire un iteration dessus et apres je fais un :

    insert champs1 .... from into table1
    insert champs1 .... from into table2 par exemple ...

    mais il faut que je puisse recopier l'id de la de la ligne inserer dans la table1 dans un champs dans la 2eme table .

    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Quelle est la structure de la table d'origine ?
    Celle des tables cibles ?
    Les relations entre celles-ci ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    c'est une table Access qui contient 12 champs

    *je met les 3 premier champs dans la table1
    *je met les 9 champs qui suivent dans la table2 et le 10éme champs et la l'Id de la meme ligne de la table1(clé étrangere)
    * et je fais pareil pour la 3éme table


    Merci

  6. #6
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    des tables Access , avec des relations 1--*

  7. #7
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut Transfert d'une table --> 3 tables
    Bonjour ,

    je remet ce sujet (mieux expliqué) .

    j'ai une table qui se constitue de plusieurs Champs (10).
    je voudrais importer cette table dans 3 tables differentes de la forme suivante :

    TAB1 = idTable,Name,Prenom,adresse
    TAB2=idEmployeur,nom,contact,adresse,idTable
    TAB3=idService,nom,contact,responsable,directeur,idEmployeur

    mon code est le suivant :

    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
     
    Public Sub Iterator()
        Dim sqlQuery As DAO.QueryDef
        Dim sqlQuery2 As DAO.QueryDef
        Dim sqlQuery3 As DAO.QueryDef
        Dim rec As Recordset
        Set rec = CurrentDb.OpenRecordset("Temporary_Table")
     
     
         Set sqlQuery = CurrentDb.QueryDefs("Requete1")
         Set sqlQuery4 = CurrentDb.QueryDefs("Requete2")
         Set sqlQuery2 = CurrentDb.QueryDefs("Requete3")
     
     
        sqlQuery.Execute
        sqlQuery2.Execute
        sqlQuery3.Execute
     
     
    End Sub
    Avec ce code j'insere toute la table et j'arrive pas a dupliquer l'idTable (TAB1)dans idTAble(TAB2) et idEmployeur(TAB2) dans idEmployeur(TAB3) .

    je pense qu'il faut parcourire la table Ligne par Ligne est faire une eventuelle requete sur les 3 tables en meme temps .

    merci de votre aide .

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par skillipo Voir le message
    TAB1 = idTable,Name,Prenom,adresse
    TAB2=idEmployeur,nom,contact,adresse,idTable
    TAB3=idService,nom,contact,responsable,directeur,idEmployeur
    Et la table source, quelle est sa structure? Quel est son identifiant?
    Amicalement

  9. #9
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    ma table source est sous la forme :

    Temporary_Table = idTableTemporaire,Name,Prenom,adresse,nomEmployeur,contact,adresse,nomService,contact,responsable,directeur

    enfet il ya tous les champs que j'importe dans les 3 tables .

    il me faut copier ligne par ligne cette table et biensur gérer les clé étrangeres .

    Merci

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Pour ca tu n'as pas besoin de parcourir ta table temporaire; Tu fais simplement une requête ajout pour chaque table destination.

    Exemple sur TAB1 (idTable,Name,Prenom,adresse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO TAB1 Select idTableTemporaire, Name, Prenom, adresse From Temporary_Table
    TAB2=idEmployeur,nom,contact,adresse,idTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO TAB2(Nom, Contact, Adresse, IdTable) Select nomEmployeur, contact, adresse, idTableTemporaire from Temporary_Table
    Pour la troisième table la requête sera un peu plus compliquée par ce que devant retrouver idEmployeur en fonction des valeurs déjà enregistrée dans les deux tables. Une sous requête (ou deux) fera l'affaire.
    Amicalement

  11. #11
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    Merci ,

    ce que j'arrive pas a faire c'est faire une boucle qui selectionne ligne par ligne ma table Temporary_Table .

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par skillipo Voir le message
    c'est faire une boucle qui selectionne ligne par ligne ma table Temporary_Table .
    Tu n'as pas besoin de boucle pour ce cas précis. De simples requêtes suffisent.
    Amicalement

  13. #13
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    Enfet l'ID que je veux rajouter dans ma 2eme table c'est celui de la 1ere table est non celui de la Temporary_Table d'ou je prend les infos .

    Temporary_TAble = ibTemporary,.........
    TAB1=idTab1,.....
    TAB2=idTab2,......,idTab1
    TAB3=idTab3,......,idTab2

    dans mon code vba , j'ai remarqué que quand je lance mes requetes SQL :

    Req1
    Req2
    Req3

    il rempli toute la TAb1 apres Tab2 , Tab3 .

    c'est la raison pour la quel j'ai pensé a faire une boucle qui prend ligne par ligne .

    Merci

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par skillipo Voir le message
    il rempli toute la TAb1 apres Tab2 , Tab3 .

    c'est la raison pour la quel j'ai pensé a faire une boucle qui prend ligne par ligne .
    Si les tables sont remplies avec les bonnes valeurs, je ne vois pas le problème.

    Citation Envoyé par skillipo Voir le message
    Enfet l'ID que je veux rajouter dans ma 2eme table c'est celui de la 1ere table est non celui de la Temporary_Table d'ou je prend les infos .
    Dans ce cas les requêtes seront différentes.

    Mais si tu tiend à ta boucle tu peux bien le faire en utilisant un Recordset
    Voici un modéle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim Mba as Database, TabTempo As Recordset, NumId As Variant
    Set Mba = currentDB()
    Set TabTempo=Mba.OpenRecordset("Temporary_Table")
     
    Do Until TabTempo.EOF
         'Tu inserts dans la Tab1
         DoCmd.RunSQL("INSERT INTO Tab1(Name, Prenom, adresse) Values(" & TabTempo("nom") & ", " & TabTempo("prenom") & ", " & TabTempo("adresse") & ")
     
    ' Ensuite tu récupéres l'id qui vient d'être ajouté dans la table Tab1 
    et tu fais les autres ajouts.    
    Loop
    Voila.
    Amicalement

  15. #15
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    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
     
    Public Sub Iterator()
        Dim rec As Recordset
        Dim Mba As Database, TabTempo As Recordset, NumId As Variant
        Dim compteur As Integer
     
     
        Set rec = CurrentDb.OpenRecordset("Temporary_Table")
        rec.MoveFirst
     
     
     
        Set Mba = CurrentDb()
        Set TabTemporary = Mba.OpenRecordset("Temporary_Table")
        Set TabLegalEntiy = Mba.OpenRecordset("LegalEntity")
        Set TabSuppliers = Mba.OpenRecordset("Suppliers")
        compteur = 0
     
     
     
        Do Until TabTemporary.EOF
             DoCmd.RunSQL "INSERT INTO LegalEntity(Country, unit, plant) Values (" &TabTemporary("Country") &","&TabTemporary("unit") & ", " & TabTemporary("plant") &")
    voici la 1ere partie de mon code il bloque sur la requete

    En meme temps est ce que c'est possible de faire plusieur Mba.OpenRecordset ?????

    Merci

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Pour savoir ce qui se passe avec la requête crée une variable et fait un Debug.Print

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Msql as String
     
    Msql="INSERT INTO LegalEntity(Country, unit, plant) Values (" &TabTemporary("Country") &", " &TabTemporary("unit") & ", " & TabTemporary("plant") &")
     
    Debug.Print Msql
    Regarde si tout va bien.
    En meme temps est ce que c'est possible de faire plusieur Mba.OpenRecordset ?????
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Set TabLegalEntiy = Mba.OpenRecordset("LegalEntity")
        Set TabSuppliers = Mba.OpenRecordset("Suppliers")
    Oui il est bien possible de le faire. Mais est ce nécessaire puisqu'on a un Insert Into?

    On peut aussi très bien remplacer les INSERT INTO par des Recordset
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TabLegalEntiy.AddNew
    .....
     
    TabLegalEntiy.update
    qui est d'ailleurs plus rapide.
    Amicalement

  17. #17
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    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
     
     
    Public Sub Test()
    Dim rec As Recordset
        Dim Mba As Database, TabTemporary As Recordset, NumId As Variant
        Dim compteur As Integer
        Dim Msql As String
     
        Set Mba = CurrentDb()
        Set TabTemporary = Mba.OpenRecordset("Temporary_Table")
     
     
          'Do Until TabTemporary.EOF
     
        Msql = "INSERT INTO LegalEntity(Country, unit, plant) Values (" & TabTemporary("Country") & ", " & TabTemporary("unit") & ", " & TabTemporary("plant") & ")"
     
     
        'Loop
     
    Debug.Print Msql
     
     
    End Sub
    alors moi j'ai fais ca et je l'es lancé mais il se passe rien .

    faut préciser qu'il ya 3jours je n'avais jamais touché a Access VBA , mais bon le monde des SSII on est obligé de s'adapter .

    je suis sur la bonne voie avec ce que j'ai ecris ou acoté de la plaque ??

    Merci

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par skillipo Voir le message
    je suis sur la bonne voie avec ce que j'ai ecris ou acoté de la plaque ??
    Pour quelqu'un qui a commencé il ya trois jours, dans un mois tu vas m'apprendre Access sans problème

    Il se passe rien c'est normal. Tu ouvre la fenêtre Visual Basic et dans le menu
    Affichage, clic sur Fenêtre d'exécution; tu verras la valeur de Msql
    Amicalement

  19. #19
    Membre régulier
    Inscrit en
    Juin 2007
    Messages
    227
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 227
    Points : 99
    Points
    99
    Par défaut
    INSERT INTO LegalEntity(Country, unit, plant) Values (NORWAY, , RO)
    INSERT INTO LegalEntity(Country, unit, plant) Values (NORWAY, , RO)

    c'est la Reponse que j'ai .

    normalement il ya + d'infos .

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par skillipo Voir le message
    INSERT INTO LegalEntity(Country, unit, plant) Values (NORWAY, , RO)
    normalement il ya + d'infos .
    les valeurs de la requêtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Values (" & TabTemporary("Country") & ", " & TabTemporary("unit") & ", " & TabTemporary("plant") & ")"
    ca veut dire que le champ "unit" de la table TabTemporary ne comporte pas de valeur.

    Est ce normal?

    En tout cas le code SQL est correct. Ca veut dire qu'en mettant juste après le Debut.Print
    tu inserts bien les valeurs dans ta table.
    Amicalement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. copier coller d'une ligne vers nouvelle table (trigger)
    Par cedric190985 dans le forum SQL
    Réponses: 1
    Dernier message: 18/05/2011, 09h08
  2. [AC-2003] Faire pointer une table vers n tables liées
    Par ted the Ors dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 16/04/2010, 12h01
  3. [MySQL] href d'une donnée de ma table vers une autre donnée de ma table
    Par <-mini-> dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/06/2008, 09h00
  4. transfert d'une table vers 3 tables differentes
    Par skillipo dans le forum VBA Access
    Réponses: 0
    Dernier message: 21/11/2007, 17h42
  5. Réponses: 4
    Dernier message: 06/03/2007, 12h00

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