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 :

Delete avec jointure impossible


Sujet :

Access

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut Delete avec jointure impossible
    Bonjour
    je n'arrive pas à supprimer des enregistrements dans une table T1.
    Je joint T1 à une 2eme table T2 car j'ai besoin de critère dans T2.
    3 champs me permettent de joindre les tables.
    Ces 3 champs sont de type texte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE [TRV - Evénements DEVON].*
    FROM [TRV - Evénements DEVON] INNER JOIN [Rap - Transaction Controle] ON ([TRV - Evénements DEVON].Code = [Rap - Transaction Controle].Transaction_numero) AND ([TRV - Evénements DEVON].Evénement = [Rap - Transaction Controle].nom_evenement) AND ([TRV - Evénements DEVON].Application = [Rap - Transaction Controle].application);
    Quand j'exécute j'ai le message suivant:
    "Impossible de supprimer dans les tables spécifiées"


    J'ai fait un test, quand je joint uniquement les champs [TRV - Evénements DEVON].Code et [Rap - Transaction Controle].Transaction_numero, le delete passe !

    Pourquoi a votre avis est-ce que les deux autres champs posent problème ?
    Si je joint uniquement sur [TRV - Evénements DEVON].Evénement et [Rap - Transaction Controle].nom_evenement, ça ne passe pas. Pareil pour [TRV - Evénements DEVON].Application et [Rap - Transaction Controle].application

    Merci pour votre aide

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 480
    Points
    3 480
    Par défaut
    Je pense que tu te trompes dans la syntaxe du delete, ne faut-il pas plutot faire comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM table WHERE condition
    Si Access le permet, tu peux donc faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM table1 WHERE idtable1 in ( select idtable1 from table2 where champtable2 = 'unevaleur' )
    K

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par KiLVaiDeN
    Je pense que tu te trompes dans la syntaxe du delete, ne faut-il pas plutot faire comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM table WHERE condition
    Si Access le permet, tu peux donc faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM table1 WHERE idtable1 in ( select idtable1 from table2 where champtable2 = 'unevaleur' )
    En fait, le SQL c'est pas moi qui l'ai crée, c'est Access, moi j'ai crée en QBE.

    Sinon pour la requete imbriqu", c'est pas possible, car la volumétrie sera trop important ....

    T'as pas d'autres idées ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    OK je viens de comprendre; les champs Evenements et Application ne sont pas indexé sans doublons.
    C'est pour ça que ça marche pas.
    Pourtant j'ai besoin de ces 3 champs car ça forme la clé.
    Comment je peux faire pour constituer la requete ?
    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Je viens de penser à un truc, n'est-il pas possibel de faire cela en VB ? Sans que je n'ai à parcourir toute la table 2 et faire les suppressions une par une dans la table 1?
    En effet je vais avoir 10 000 enregistrements dans la table 1, j'aurais donc 10 000 delete ....

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour _developpeur_,
    Citation Envoyé par _developpeur_
    Je viens de penser à un truc, n'est-il pas possibel de faire cela en VB ? Sans que je n'ai à parcourir toute la table 2 et faire les suppressions une par une dans la table 1?
    Regarde ici http://www.developpez.net/forums/vie...light=#2367097, la solution en DAO / VBA s'y trouve sûrement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CurrentDb.Execute <nom de la requête>
     
       ou
     
    CurrentDb.QueryDefs(<nom de la requête>).Execute

  7. #7
    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
    Developpeur a écrit

    Sinon pour la requete imbriqu", c'est pas possible, car la volumétrie sera trop important ....
    là je ne comprend vraiment pas la solution de KiLVaiDeN est certainement la bonne. J'ai déjà testé c'est assez simple à faire même avec le QBE.
    Il faut faire la 1ère requête pour le in( select..) et la mettre dans la 2ème.

    la volumétrie n'a aucune importance surtout en voyant ta requête

    pourquoi cherche compliqué lorsqu'il y a des solutions simples!

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Alexandre Sahli
    Developpeur a écrit

    Sinon pour la requete imbriqu", c'est pas possible, car la volumétrie sera trop important ....
    là je ne comprend vraiment pas la solution de KiLVaiDeN est certainement la bonne. J'ai déjà testé c'est assez simple à faire même avec le QBE.
    Il faut faire la 1ère requête pour le in( select..) et la mettre dans la 2ème.

    la volumétrie n'a aucune importance surtout en voyant ta requête

    pourquoi cherche compliqué lorsqu'il y a des solutions simples!
    Tu fais ça en deux étapes avec l'assistant?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 134
    Points : 46
    Points
    46
    Par défaut
    J'ai le même pb
    Par contre, je n'ai pas d'identifiant unique dans ma table, donc pour faire un IN je suis un peu embêté...
    Y'a t il une solution?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par =JBO=
    Bonjour _developpeur_,
    Citation Envoyé par _developpeur_
    Je viens de penser à un truc, n'est-il pas possibel de faire cela en VB ? Sans que je n'ai à parcourir toute la table 2 et faire les suppressions une par une dans la table 1?
    Regarde ici http://www.developpez.net/forums/vie...light=#2367097, la solution en DAO / VBA s'y trouve sûrement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CurrentDb.Execute <nom de la requête>
     
       ou
     
    CurrentDb.QueryDefs(<nom de la requête>).Execute
    J'avoue n'avoir recherché que dans les tutos. Désolé.
    J'ai résolu mon problème d'une autre manière. J'ai rajouté un booleén Supprime dans la table en question.
    Je fais une première requete (la meme que le delete sauf que c'est un update) et je passe les enregistrements a Supprime=oui. La requete Update ne pose pas de problèmes!!! Alors que le delete .....
    Bizare Access
    Ensuite je delete tous les Supprime=oui dans la table sans faire de jointure et la ça passe .
    Bon c'est de la bidouille ...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par Alexandre Sahli
    Developpeur a écrit

    Sinon pour la requete imbriqu", c'est pas possible, car la volumétrie sera trop important ....
    là je ne comprend vraiment pas la solution de KiLVaiDeN est certainement la bonne. J'ai déjà testé c'est assez simple à faire même avec le QBE.
    Il faut faire la 1ère requête pour le in( select..) et la mettre dans la 2ème.

    la volumétrie n'a aucune importance surtout en voyant ta requête

    pourquoi cherche compliqué lorsqu'il y a des solutions simples!
    J'ai testé, et les perfs quand tu fais une requete imbriqué sont catastrophiques...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par kluh
    J'ai le même pb
    Par contre, je n'ai pas d'identifiant unique dans ma table, donc pour faire un IN je suis un peu embêté...
    Y'a t il une solution?
    Essai la mienne

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 304
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par =JBO=
    Bonjour _developpeur_,
    Citation Envoyé par _developpeur_
    Je viens de penser à un truc, n'est-il pas possibel de faire cela en VB ? Sans que je n'ai à parcourir toute la table 2 et faire les suppressions une par une dans la table 1?
    Regarde ici http://www.developpez.net/forums/vie...light=#2367097, la solution en DAO / VBA s'y trouve sûrement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CurrentDb.Execute <nom de la requête>
     
       ou
     
    CurrentDb.QueryDefs(<nom de la requête>).Execute
    Ou celle la

  14. #14
    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
    kluh a écrit:

    J'ai le même pb
    Par contre, je n'ai pas d'identifiant unique dans ma table, donc pour faire un IN je suis un peu embêté...
    Y'a t il une solution?
    même sans identifiant unique dans ta table c'est aussi possible

    comment je fait:

    par exemple

    Table1 avec T1.champs1, T1.champs2,...


    le champs T1.Champs1 est lié à d'autre table T2, T3,...

    je fait une 1ère requete avec la table éffacement avec T1 et je mets seulement le T1.champs1

    puis j'ouvre une autre requête sélection

    avec les tables T1, T2, T3 ....

    je glisse le champs T1.Champs1 et les autres champs nécessaire pour les conditions. Je place les conditions que je veux et je mets ces champs comme non affiché donc à décocher. j'affiche ensuite le code sql et je le copie

    je retourne dans ma première requête et comme critère pour T1.Champs1 je me
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    in (Ctrl-V pour recopier le code sql et je vais à la fin du code et je mets)
    puis j'exécute la requête

    j'ai essayé d'être bref il faudrait un tuto
    A+

Discussions similaires

  1. [Access] Prob ds un Delete avec jointure
    Par fikou dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 25/06/2009, 00h04
  2. [SQL Server CE] DELETE avec jointure
    Par Nico57 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/02/2008, 17h03
  3. [SQL] DELETE avec jointures
    Par eagleleader dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 12/10/2007, 09h37
  4. [SqlServer 2k] DELETE avec jointure
    Par Filippo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/06/2007, 18h12
  5. Requête DELETE avec jointure
    Par Roach- dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/03/2006, 15h00

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