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

Langage SQL Discussion :

[Access][Débutant] Insert into à l'intérieur d'un select * from


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut [Access][Débutant] Insert into à l'intérieur d'un select * from
    Bonjour tout le monde,

    J'ai une requête SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * FROM janvier WHERE [jour] = '04'
    .

    Janvier correspond à une table.

    Est-il possible dans le même code de demander d'insérer une donnée avec un Insert Into sans dire que le nom de la table à mettre à jour s'appelle janvier ?

    Il faudrait donc dire d'insérer dans la table en cours ainsi que dans l'enregistrement en cours.

    Je vous explique :

    J'ai créé un site asp, des informations sont récupérées de liste déroulante et enregistrées dans des variables.

    J'ai une variable nommée mois, cette variable contient soit janvier, soit février, soit mars....

    J'ai créé une chaîne sql reprenant cette variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selecttable = "select * FROM " & hfmois & " WHERE [jour] = '" & hfjour & "' "
    hfmois = le nom du mois de la liste déroulante (dans notre cas janvier).

    hfjour = le jour de la liste déroulante.

    Je lui demande donc de sélectionner dans la table Janvier, la colonne O3.

    Ensuite, je devrais dans cette même table introduire le nom de l'utilisateur.

    Le nom de l'utilisatuer est repris dans une variable hfuser.

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO '" & selecttable & "' ([user]) VALUES ('" & hfuser & "')"
    insert into Select * from janvier.....

    J'espère que j'ai clairement posé ma question, si vous avez des questions, n'hésitez pas à me contacter.

    Merci d'avance pour votre aide et bonne soirée.

    beegees

  2. #2
    Membre habitué Avatar de petit arbre
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Points : 153
    Points
    153
    Par défaut
    Une question me hante :

    pourquoi avoir construit une table par mois de l'année au lieu de faire une table plus globale avec un champ mois ?

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Je pense que je pourrais contourner mon problème avec cette chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selecttable = "insert into '" & hfmois & "' ([user]) VALUES ('" & hfuser & "') WHERE jour =  "& hfjour & " "
    ça me donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into 'mars' ([user]) VALUES ('M. Musclor') WHERE jour = 03
    Mais rien n'est mise à jour dans la table.

    Merci
    beegees

  4. #4
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par petit arbre
    Une question me hante :

    pourquoi avoir construit une table par mois de l'année au lieu de faire une table plus globale avec un champ mois ?
    Bonjour,

    Bonne question.

    Je peux revenir en arrière dans mon travaille vue que je commence à peine ce projet.

    En plus du mois, je met 01, 02... jusque 28, 30 ou 31 par rapport au mois.

    ça serait mieux alors de mettre un champs mois et non créer douze tables ?

    Merci pour ton aide.

    beegees

  5. #5
    Membre habitué Avatar de petit arbre
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Points : 153
    Points
    153
    Par défaut
    En fait la partie analyse des données est très importante et il vaut mieux y perdre un peu de temps car on en gagne beaucoup après.

    Je ne sais pas ce que stockes dans ces fameuses tables, mais une structure
    du style :

    Table "données"
    (
    mois number(2),
    jour number(2),
    utilisateur char(30),
    donnee1 number(xx)

    etc...
    )

    est générale et te permets de faire ton insert + select facilement.


    insert into donnees(donnee1)
    select la_valeur from .....
    where mois = &mois
    and jour = &jour
    and utilisateur = &utilisateur

    Enfin, c'est rapide, il est tard et je vais me coucher ...

    bon courage..

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into 'mars' ([user]) VALUES ('M. Musclor') WHERE jour = 03
    Un truc m'échappe, tu fais un insert d'une valeur avec une clausse WHERE !!!!

    Je pense que ce que tu veux faire c'est plus un update

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    update 'mars' set user = 'M. Musclor' where jour = 03

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour tout le monde,

    Merci pour vos réponses.

    @mdevlieg

    Quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    selecttable = "update '" & hfmois & "' set user = '" & hfuser & "' WHERE jour =  "& hfjour & " "
    response.write(selecttable)
    cnn.Execute(selecttable)
    J'obtiens ce message d'erreur :

    update 'mars' set user = 'M. Musclor' WHERE jour = 04
    Microsoft OLE DB Provider for ODBC Drivers erreur '80004005'

    [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans la requête. La clause de la requête est incomplète.

    /RSI/recup_rsi.asp, ligne 54
    En ligne 54, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cnn.Execute(selecttable)
    Qu'en penses-tu ?

    Merci
    Beegees

  8. #8
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par petit arbre
    En fait la partie analyse des données est très importante et il vaut mieux y perdre un peu de temps car on en gagne beaucoup après.

    Je ne sais pas ce que stockes dans ces fameuses tables, mais une structure
    du style :

    Table "données"
    (
    mois number(2),
    jour number(2),
    utilisateur char(30),
    donnee1 number(xx)

    etc...
    )

    est générale et te permets de faire ton insert + select facilement.


    insert into donnees(donnee1)
    select la_valeur from .....
    where mois = &mois
    and jour = &jour
    and utilisateur = &utilisateur

    Enfin, c'est rapide, il est tard et je vais me coucher ...

    bon courage..
    Bonjour PetitArbre,

    Merci pour ta réponse.

    Dans ces tables, on trouvera le nom de la personne qui aura réservé la salle.

    Donc, pour toi, c'est mieux de partager tout ça en plusieurs tables ?

    Utilises-tu la méthode MERISE ? Si oui peux-tu un peu m'expliquer ?

    Merci pour ton dévouement.

    beegees

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Citation Envoyé par beegees
    Quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    selecttable = "update '" & hfmois & "' set user = '" & hfuser & "' WHERE jour =  "& hfjour & " "
    response.write(selecttable)
    cnn.Execute(selecttable)
    J'obtiens ce message d'erreur :


    En ligne 54, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cnn.Execute(selecttable)
    Qu'en penses-tu ?

    Merci
    Beegees

    Le problème vient des quotes au niveau du nom de la table

    il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    selecttable = "update " & hfmois & " set user = '" & hfuser & "' WHERE jour =  "& hfjour & " "

  10. #10
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    J'avais essayé sans les quotes mais voici le message d'erreur :

    Edit : le message d'erreur que j'avais inscrit n'était pas correcte, voic le bon

    Microsoft OLE DB Provider for ODBC Drivers erreur '80040e07'

    [Microsoft][Pilote ODBC Microsoft Access] Type de données incompatible dans l'expression du critère.

    /RSI/recup_rsi.asp, ligne 55
    Voici ce que la chaîne SLQ fait, on peut voire qu'il ne donne pas le nom de la table :

    update janvier set user = 'M. VAN DAMME' WHERE jour = 01

    Tous les champs de ma tables sont en texte

    Merci encore pour ton aide.

    beegees

  11. #11
    Membre habitué Avatar de petit arbre
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Points : 153
    Points
    153
    Par défaut
    Salut, effectivement j'utilise la méthode Merise et un outil de modélisation de données AVANT de programmer quoi que ce soit.

    En passant par la partie conceptuelle du problème, je pense que ça t'aiderait à réfléchir sur le format idéal de tes données au vu du problème à résoudre.

    Tu as d'excellents documents à lire sur Merise.

    Bon courage.

  12. #12
    Membre habitué Avatar de petit arbre
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Points : 153
    Points
    153
    Par défaut
    Pour ton histoire de quote, effectivement il faut les shunter autour du nom de la table, essaye ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    selecttable = "update '''" & hfmois & "''' set user = '" & hfuser & "' WHERE jour =  "& hfjour & " "
    response.write(selecttable)
    cnn.Execute(selecttable)

    J'ai mis trois quote à la file, peut être deux? tiens nous au courant...

  13. #13
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut Petit Abre,

    Bien dormi ?

    Je suis actuellement un graduat en informatique (bacc) et j'apprends la méthode MERISE, mais pour l'instant, on n'est qu'à l'étude de l'existant et à un résumé de ce que fait MERISE.

    pour ce qui est du code, j'ai mis cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    selecttable = "update ''" & hfmois & "''' set user = '" & hfuser & "' WHERE jour =  "& hfjour & " "
    response.write(selecttable)
    cnn.Execute(selecttable)
    et ça me donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update ''janvier''' set user = 'M. Musclor' WHERE jour = 03 
    Microsoft OLE DB Provider for ODBC Drivers erreur '80004005' 
     
    [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans la requête. La clause de la requête est incomplète. 
     
    /RSI/recup_rsi.asp, ligne 55
    J'ai le même message d'erreur avec trois '''

    Qu'en penses-tu ?

    Merci et bon dimanche
    beegees

  14. #14
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    je vous informe que j'ai édité le message numéro 10.

    beegees

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 140
    Points : 166
    Points
    166
    Par défaut
    Bonjour,

    Tu as bien fait d'éditer ton message 10 car je ne voyais pas ce que çà pouvait être.

    Là le problème c'est que jour doit être de type varchar et non integer auquel cas tu dois rajouter les quotes pour le jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    selecttable = "update " & hfmois & " set user = '" & hfuser & "' WHERE jour =  '"& hfjour & "' "

  16. #16
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Merci pour ta réponse qui a réglé le problème

    C'est vraiment sympa de m'avoir aidé un dimanche (merci aussi à petit arbre).

    Bon fin de WE

    Beegees

  17. #17
    Membre habitué Avatar de petit arbre
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Points : 153
    Points
    153
    Par défaut
    je suis d'accord avec mdevlieg, ça devrait résoudre cette partie du problème..

  18. #18
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    oui ça fonctionne très bien.

    Je dois avouer que je ne comprends pas bien pourquoi on a du ajouter des quotes à jour mais bon, ça fonctionne.

    Très bonne soirée à vous deux et aux membres de ce forum.

    beegees

  19. #19
    Membre habitué Avatar de petit arbre
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 143
    Points : 153
    Points
    153
    Par défaut
    en fait c'est pas bien sorcier,
    si jour est une valeur de type caractère on entoure sa valeur par des quotes parce qu'il peut y avoir des espaces ou autre et les quotes aident à définir l'étendue de la valeur.

    valeur = 'nbb ffff__dgfdffd'

    si jour est une valeur numérique (ce qui me semble plus logique) ce n'est pas nécessaire.

    valeur = 1

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

Discussions similaires

  1. Access 2003 - formulaires et INSERT INTO
    Par Izura dans le forum VBA Access
    Réponses: 7
    Dernier message: 19/12/2013, 13h50
  2. [C#]faire 1 Insert Into sur Access
    Par mcay dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/02/2010, 11h47
  3. [ACCESS] Bouton Requete SQL INSERT INTO
    Par harry le ravi dans le forum VBA Access
    Réponses: 8
    Dernier message: 28/06/2008, 22h33
  4. [access 2003][sql] utilisation "INSERT INTO "
    Par Milyshyn76 dans le forum VBA Access
    Réponses: 9
    Dernier message: 27/03/2008, 14h15
  5. [MySQL / Access] : incompatibilité sur un INSERT INTO ...
    Par guidav dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/04/2006, 16h15

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