none
comment faire une requête de non-correspondance RRS feed

  • Question

  • Bonsoir,

    Comment peut ton faire une requête de nom correspondance dans vb.net, j'utilise Access et j'ai deux tables une Tab_Entreprises et Tab_Réglements. le champ codepde contient 1 pour 1er trimestre et 2 pour 2ème trimestre.

    j'ai des entreprises qui doivent payer une taxe une fois chaque semestre de l'année et je souhaite filtrer les entreprises qui n'ont pas payé sur un semestre donné. voici la requête entrée dans mon DataGriView

    SELECT        [ENTREPRISES.id_entr], CodeEntr, NomEnt, AdresPost, AdresPhy, [Ar-Reci], Activité, Sper, Classe, Ville, LibDir, [zone], CodeDir, CodeRgt, MontRgt, DatRgt, 
                             [REGLEMENTS.id_entr], codepde
    FROM            ReqNon_Paye
    WHERE        (DatRgt BETWEEN ? AND ?) AND (codepde <> ?)
    mais je n'arrive pas à obtenir les entreprises qui n'ont pas payé sur une période donnée même si elles ont payé l'autre semestre de la même année

    jeudi 7 novembre 2013 17:47

Réponses

  • Dans ce cas dans la condition Where vous n'avez plus besoin de codepde = ? (si j'ai bien compris c'est le semestre) et vous devez faire attention aux parenthèses :

     WHERE        (NOT EXISTS

                                 (SELECT        CodeRgt, Numchq, NomBq, MontRgt, ModeRgt, DatRgt, codepde, id_entr, NumBor, Type_Bor

                                   FROM            REGLEMENTS REGLEMENTS_1

                                   WHERE        (ENTREPRISES.id_Entr = id_entr) AND (DatRgt BETWEEN ? AND ?) ))

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse dinjer mardi 12 novembre 2013 14:10
    mardi 12 novembre 2013 11:31

Toutes les réponses

  • Bonjour,

    Voilà le genre de requête à appliquer :

    SELECT FROM Tab_Entreprises
    WHERE NOT EXISTS (SELECT * FROM Tab_Règlements WHERE Tab_Entreprises.Id = Tab_Règlements.IdEntreprise AND codepde = 4)

    Bien évidemment, nous pourrons vous donner la requête exacte si vous nous donnez le détail de vos tables ainsi que le contraintes de clés étrangères...

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    • Proposé comme réponse Aurel Bera vendredi 8 novembre 2013 09:20
    jeudi 7 novembre 2013 19:19
    Modérateur
  • Bonjour et merci pour votre aide.

    voici le contenu de mon DataSet qui est une requête des Tables Entreprises et Règlement. J'ai crée cette requête dans access et je l'ai recupérée dans un DataSet a partir de VB.net.


    Comme signifié dans le poste précédant, j'ai des entreprises qui doivent payer une taxe une fois chaque semestre de l'année et je souhaite filtrer les entreprises qui n'ont pas payé sur un semestre donné.

    en Rouge est le champ codepde (Code de la période) le champ codepde contient 1 pour 1er trimestre et 2 pour 2ème trimestre. En vers les Entreprises et orange le champ date.

    J'espère avoir donné plus de détails!

    Merci


    • Modifié dinjer vendredi 8 novembre 2013 11:32
    vendredi 8 novembre 2013 11:08
  • Bonjour,

    Vous nous donnez le schéma de votre requête. Nous voudrions le schéma de vos 2 tables afin de vous indiquer la requête exacte à exécuter.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    vendredi 8 novembre 2013 12:21
    Modérateur
  • ok je vous montre!

    ok merci pour votre aide!

    vendredi 8 novembre 2013 13:38
  • Bonjour,

    Voilà la requête SQL à utiliser pour récupérer les entreprises qui n'ont pas payé le 2ème semestre (codepde = 2) :

    SELECT 
    FROM Entreprises
    WHERE NOT EXISTS (SELECT * FROM Reglements WHERE Entreprises.id_entr = Reglements.Id_entr AND codepde = 2)
    
    

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    vendredi 8 novembre 2013 14:00
    Modérateur
  • Bonjour,

    Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    lundi 11 novembre 2013 15:19
  • Bonsoir à vous et merci pour l'aide.

    Pour l'instant je n'ai pas encore eu le résultat escompté. Celle de Gilles me donne le résultat des entreprises qui ont payés le 2 semestre et nom pas ceux qui nom pas payé. Je voudrais bien pouvoir filtre sur une période donnée pour un semestre nom payé. voici la requête proposée par Gilles

    SELECT        id_Entr, CodeEntr, NomEnt, AdresPost, AdresPhy, [Ar-Reci], Activité, Sper, Classe, Ville, CodeSurf, CodeDir, tel, Redevance
    FROM            ENTREPRISES
    WHERE        (NOT EXISTS
                                 (SELECT        CodeRgt, Numchq, NomBq, MontRgt, ModeRgt, DatRgt, codepde, id_entr, NumBor, Type_Bor
                                   FROM            REGLEMENTS
                                   WHERE        (ENTREPRISES.id_Entr = id_entr) AND (codepde = 2)))

    exple: J'ai enregitré 5 entreprises ayant effectuée des paiements;

    Pour moi le résultat devrait donner les entreprises encadrées en rouge.

    VOICI  un exemple qui devrait me permet de filtre les entreprise n'ayant pas payer dans une période donnée pour (1/1/12 au 31/12/12), Mais là aussi je cale!!! à l'aide

    SELECT        id_Entr, CodeEntr, NomEnt, AdresPost, AdresPhy, [Ar-Reci], Activité, Sper, Classe, Ville, CodeSurf, CodeDir, tel, Redevance
    FROM            ENTREPRISES
    WHERE        (NOT EXISTS
                                 (SELECT        CodeRgt, Numchq, NomBq, MontRgt, ModeRgt, DatRgt, codepde, id_entr, NumBor, Type_Bor
                                   FROM            REGLEMENTS REGLEMENTS_1
                                   WHERE        (ENTREPRISES.id_Entr = id_entr) AND (codepde = ?))) AND (DatRgt BETWEEN ? AND ?)

    mardi 12 novembre 2013 11:20
  • Dans ce cas dans la condition Where vous n'avez plus besoin de codepde = ? (si j'ai bien compris c'est le semestre) et vous devez faire attention aux parenthèses :

     WHERE        (NOT EXISTS

                                 (SELECT        CodeRgt, Numchq, NomBq, MontRgt, ModeRgt, DatRgt, codepde, id_entr, NumBor, Type_Bor

                                   FROM            REGLEMENTS REGLEMENTS_1

                                   WHERE        (ENTREPRISES.id_Entr = id_entr) AND (DatRgt BETWEEN ? AND ?) ))

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    • Marqué comme réponse dinjer mardi 12 novembre 2013 14:10
    mardi 12 novembre 2013 11:31
  • Merci ça marche
    mardi 12 novembre 2013 14:10