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 :

Requete insert avec select


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Requete insert avec select
    Bonjour,

    j'ai un problème avec une requête insert dans laquelle je souhaite mettre un select.

    J'ai trouvé sur un forum :

    Requête Ajout avec plusieurs enregistrements :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO TableCible [(champ1[, champ2[, ...]])] [IN basededonnéesexterne]
    SELECT [source.]champ1[, champ2[, ...]
    FROM expressiontable

    Requête Ajout avec un seul enregistrement :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO TableCible [(champ1[, champ2[, ...]])]
    VALUES (valeur1[, valeur2[, ...])

    Mais ce que je veux faire c'est un mix des deux mais ça ne marche pas.

    Mon formulaire permet d'ajouter une personne en liant cette personne à un domaine.
    D'abord j'ai une requete qui insert ma personne dans ma table a_alerter.

    Puis j'ai besoin de récuperer l'identifiant de cette personne (numéro auto, clé primaire de ma table) pour insérer dans le table qui fait le lien entre la personne et le domaine.

    Le domaine est lui directement récupéré dans le formulaire.

    Ma requete select (dans mon code VBA) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    requete2 = "select id_a_alerter from a_alerter " _
                       & " where libelle=" & Chr(34) & Form_F_ajout_a_alerter.libelle & Chr(34)
    Et ma requete insert (qui ne marche pas bien sûr !!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    requete = "insert into a_alerter_domaine " _
              & "(id_a_alerter, id_domaine) values (" & requete2 & ", "  & Chr(34) _
              &   Form_F_ajout_a_alerter.liste_domaine.ItemData(compteur) _
              & Chr(34) & ");"
    Merci d'avance pour vos idées

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Janvier 2008
    Messages : 88
    Points : 44
    Points
    44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    requete = "insert into a_alerter_domaine " _
              & "(id_a_alerter, id_domaine) values (" & requete2 & ", "  & Chr(34) _
              &   Form_F_ajout_a_alerter.liste_domaine.ItemData(compteur) _
              & Chr(34) & ");"
    Merci d'avance pour vos idées
    Moi j'aurais mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     requete = "insert into a_alerter_domaine (id_a_alerter, id_domaine)"
             requête2 = "Select "id_a_alerter, id_domaine"
             requête3 = " FROM F_ajout_a_alerter.liste_domaine.ItemDate(compteur) ; "
    Debug.Print pour chaque ligne et tu verras bien ton erreur
    et DoCmd.RunSQL requete + requete2 + .....

    Je ne sais pas à quoi correspond le Chr(34) donc je te laisse l'adaptation

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par zilfana63 Voir le message
    Moi j'aurais mis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     requete = "insert into a_alerter_domaine (id_a_alerter, id_domaine)"
             requête2 = "Select "id_a_alerter, id_domaine"
             requête3 = " FROM F_ajout_a_alerter.liste_domaine.ItemDate(compteur) ; "
    Debug.Print pour chaque ligne et tu verras bien ton erreur
    et DoCmd.RunSQL requete + requete2 + .....

    Je ne sais pas à quoi correspond le Chr(34) donc je te laisse l'adaptation
    Le Chr(34) c'est pour mettre des guillemets dans une chaine de caractère en VBA.

    Tu m'as donné une idée pour résoudre mon problème. Je vais essayer et je te tiens au courant.

    Merci

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 94
    Points : 68
    Points
    68
    Par défaut
    Juste qques idées comme ca ...

    Ce qui me saute aux yeux c'est ça :
    que l'on trouve dans la requête "requete"

    Le premier test que j'aurais fait est d'essayer d'exécuter "requete" en remplaçant le contenu qu'est censé te ramener requete2 par une valeur bidon en dur ... Enfin, si tu as des contraintes d'intégrité sur tes tables elle ne doit pas être si bidon que ça, il faut que cette valeur existe dans la table de référence.

    Si le test passe c'est que la syntaxe de l'insertion du résultat de requete2 n'est pas bon ...

    A tester une syntaxe du genre:
    Lorsque j'ai des problèmes de syntaxe SQL, je teste dans l'éditeur de requête avec des valeurs en dur et une fois que j'ai la syntaxe correcte, j'intègre dans le code

  5. #5
    Membre régulier Avatar de katoyi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par nanette38 Voir le message
    Bonjour,

    j'ai un problème avec une requête insert dans laquelle je souhaite mettre un select.

    Et ma requete insert (qui ne marche pas bien sûr !!)
    C'est quel erreur au juste tu as ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Bonjour,

    Pour une sécurité à toute épreuve, c'est à dire que tu ajoutes bien des données pour la personne que tu viens d'introduire.
    Je ferais d'abord un ajout avec le record set et je rajouterais les données. Pendant l'ajout je récupère l'identifiant de la nouvelle personne ajoutée et ensuite je ferais la requête ajout pour plusieurs enregistrements.

    bonne chance

  7. #7
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut à tous,

    nanette38> j'ai pas tout lu, mais par rapport à ce que tu dis dans ton premier post, il y a vraiment plusieurs solutions conceptuelles qui peuvent résoudre autrement ce problème.
    mais si tu veux continuer sur cette piste, utilise les fonctions de domaine, dans ton cas la fonction DLookup() pour récupérer la valeur de <id_a_alerter> est appropriée.
    je n'ai pas testé l'imbrication de requete comme tu le fait dans le values mais il y a erreur dans ta sous requete "requete2" : elle peut retourner plus d'une valeur (en compréhension), un groupement (first par ex) est de rigueur.



    ps: bienvenu sur le forum.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci pour toutes vos réponses

    Finalement j'ai fait une "pseudo-jointure" (car aucun champ commun) des mes tables car sur une des tables je suis sûr d'avoir qu'une seule ligne pour ma valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    requete2 = "select id_a_alerter, id_domaine from a_alerter, domaine" _
                       & " where libelle=" & Chr(34) & Form_F_ajout_a_alerter.libelle & Chr(34) _
                       & " and id_domaine=" & Form_F_ajout_a_alerter.liste_domaine.ItemData(compteur)
     
     
    requete = "insert into a_alerter_domaine " _
                               & "(id_a_alerter, id_domaine) " _
                               & requete2 & ";"
    Merci encore à tous

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

Discussions similaires

  1. Requete INSERT avec plusieurs SELECT
    Par Tinkite82 dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/09/2009, 17h30
  2. Requete insert avec select
    Par burndev dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/12/2008, 16h55
  3. Requete insertion avec des select
    Par miketidy dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/05/2008, 10h36
  4. Requete deffectueuse Insert avec select
    Par Dargos dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/05/2007, 13h58
  5. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05

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