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 :

Remplir une table avec une requête


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 62
    Points : 36
    Points
    36
    Par défaut Remplir une table avec une requête
    Salut !

    Je dois faire une importation de données pour mon application.
    J'ai donc créé deux tables temporaires (qui contiennent des données venant d'Excel)
    Ensuite j'ai créé une requête en mode création enregistrée sous le nom Requete1 (par exemple) afin de remplir une partie d'une table (on l'apellera tb_Lot)
    Seulement voila, je ne c'est pas si c'est possible sous access?
    Je voudrai faire une requete du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO tb_Lot (champ1, champ2, champ3) VALUES ????
    C'est la que je vois pas comment faire.
    Admettons que dans ma requête Requete1 j'ai trois champs qui correspondent à champ1, champ2, champ3, quelle est la syntaxe à utiliser?

  2. #2
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    En fait quand tu importes d'excel tu donnes le nom de la table ou mettre les donnees et il remplit automatiquement, il n'y a pas besoin de requete d'ajout. Par contre si tu veux remplir une nouvelle table a partir d'une table existante (remplie par excel par exemple) c'est ca pour creer une nouvelle table TableDestination:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Champ1, Champ2, Champ3 INTO TableDestination
    FROM TableSource
    WHERE ...;
    Et ca pour ajouter a une table TableDestination existante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO TableDestination
    SELECT Champ1, Champ2, Champ3
    FROM TableSource
    WHERE ...;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Le problème c'est que j'importe d'abord mes données sous 2 nouvelles tables temporaires.
    Seulement la structure de ces tables temporaires ne correspond pas à celle ou je dois insérer définitivement mes données.
    C'est pourquoi je dois créer une requête qui utilise les 2 tables temporaires afin de trier les données puis les insérer dans ma table finale

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Ah bah non, tu as raison je pense qu'il suffit que j'utilise ta syntaxe en incluant ma requête dedans. Je test et si ça marche je déleste.
    Merci

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    J'ai testé mais j'ai une erreur
    Voila ma requête (les champs de mes tables temporaires sont un peu bordéliques désolé )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    StrSQL = "SELECT DISTINCT JDS.CODELOT, JDS.N°COPRO, JDS.N°PROPRIO, 
    JDS.RESIDENCE, ImportLoyer.Periodicite, ImportLoyer.HT INTO tb_Lot (NumLot, 
    NumCoopro, CodeProprietaire,IdResidence, Periodicite, MontantLoyerHT)
    FROM ImportLoyer INNER JOIN JDS ON ImportLoyer.CodeProprio = JDS.N°PROPRIO"
    J'obtiens l'erreur suivante :

    La requête doit être construite à partir d'au moins une table ou une requête source

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    bjr,

    il ne faut pas préciser les champs de destination dans la clause INTO

  7. #7
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Je ne sais pas d'ou vient l'erreur mais comme je ne sais pas si on peut mettre INTO table (champs...), essaye toujours ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StrSQL = "SELECT DISTINCT JDS.CODELOT AS NumLot, JDS.N°COPRO AS NumCoopro, JDS.N°PROPRIO AS CodeProprietaire, 
    JDS.RESIDENCE AS IdResidence, ImportLoyer.Periodicite As Periodicite, ImportLoyer.HT As MontantLoyerHT INTO tb_Lot 
    FROM ImportLoyer INNER JOIN JDS ON ImportLoyer.CodeProprio = JDS.N°PROPRIO"

  8. #8
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    si on veut spécifier les champs de destination, c'est que la table existe déjà : donc c'est plutôt INSERT INTO qu'il faut utiliser
    SELECT .. INTO c'est pour une création de table, donc pas de précision des champs de destination, ils n'existent pas encore

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Ok, mais le problème c'est que le nombre de champs de ma requête ne coincide pas avec le nombre de champs de ma table...
    En effet, j'ai 5 champs de plus dans ma table..
    J'ai qund même testé et la il me met :
    La table tb_Lot existe déja

  10. #10
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Si tu veux ajouter des lignes a une table existante c'est plutot la syntaxe d'Arkham qu'il faut suivre, comme ca ca te permet de creer la table toi meme avec tous les champs qu'il te faut et tu ne devrais plus avoir l'erreur

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Ah je n'avais pas vu ta réponse Arkham.
    Seulement je ne vois pas la syntaxe à utiliser avec un INSERT INTO :

    INSERT INTO MaTable(mes champs) VALUES (ma requête) ?

    ou alors

    INSERT (ma requete) INTO MaTable(mes champs)?

    Les deux formes me provoquent des erreurs de syntaxe

  12. #12
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Et si tu ne precises pas les champs de destination mais utilises les AS dans les requetes de selection, il saura peut-etre tout seul les mettre ou il faut ?

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    J'ai essayé avec la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        StrSQL = "INSERT INTO tb_Lot VALUES (SELECT DISTINCT 
    JDS.CODELOT as NumLot, JDS.N°COPRO as NumCoopro, JDS.N°PROPRIO as 
    CodeProprietaire, JDS.RESIDENCE as IdResidence, ImportLoyer.Periodicite as
     Periodicite, ImportLoyer.HT as MontantLoyerHT FROM ImportLoyer INNER JOIN 
    JDS ON ImportLoyer.CodeProprio = JDS.N°PROPRIO)"
    Mais j'ai encore une erreur :
    Erreur de syntaxe dans l'expression 'SELECT DISTINCT
    JDS.CODELOT as NumLot'

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2015, 16h10
  2. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  3. [MySQL] requete dans une table avec une varible d'une autre table
    Par kogoi dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/11/2011, 15h24
  4. Réponses: 6
    Dernier message: 30/08/2007, 16h47
  5. Réponses: 35
    Dernier message: 21/03/2007, 10h36

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