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 de suppression basée sur 2 tables , supression multi champs [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut Requete de suppression basée sur 2 tables , supression multi champs
    Bonjour,
    Je suis encore débutant, merci pour votre compréhension

    J'ai 2 tables : T_Planning et T_Personnel

    Le but est de supprimer les enregistrements Heure1MA à HeureR2AM après la date de sortie dans la table T_Personnel si "Sortie" est coché .

    J'ai fait une requête de selection qui me donne le résultat escompté:
    en sql cela donne:
    Nom : Capture2.JPG
Affichages : 2007
Taille : 62,6 Ko
    et avec l'interface graphique:
    Nom : Capture1.JPG
Affichages : 2162
Taille : 114,6 Ko

    Si je transforme cette requête en requête de suppression, j'ai un message :
    Nom : Capture3.JPG
Affichages : 2015
Taille : 18,6 Ko

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    dans l'interface graphique, il ne faut pas cocher "Afficher" pour les champs qui n'appartiennent pas à la table à supprimer et cocher uniquement "*" pour T_Personnel et il faut au moins une jointure entre les 2 tables, sinon il faudra passer par des fonctions de domaine.
    Peux-tu poster le SQL en code, pas en image ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    en mode selection, j'ai décoché sortie et date jour.
    le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Planning.Heure1MA, T_Planning.Heure2MA, T_Planning.Heure1AM, T_Planning.Heure2AM, T_Planning.HeureR1MA, T_Planning.HeureR2MA, T_Planning.HeureR1AM, T_Planning.HeureR2AM
    FROM T_Planning, T_Personnel
    WHERE (((T_Planning.Heure1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]));
    souci pour la jointure, je n'ai pas de champ commun, il faut que je modifie une table en mettant juste un champ en commun pour établire la jointure?

    merci de ton intérêt

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    en mode selection, j'ai décoché sortie et date jour.
    tu n'as pas compris : c'est sur TOUS les champs de la table T_Planning qu'il faut le faire là, tu as fait le contraire.
    Si ta requête fonctionne en mode sélection et renvoie bien ce que tu souhaites supprimer, il faut maintenant la transformer en requête de suppression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Personnel.*
    FROM T_Planning, T_Personnel
    WHERE (((T_Planning.Heure1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]));
    souci pour la jointure, je n'ai pas de champ commun, il faut que je modifie une table en mettant juste un champ en commun pour établire la jointure?
    c'est une solution, mais je ne comprend pas trop comment fonctionne le modèle de données, sauf si T_planning est une table paramètre qui ne reçoit pas de nouveaux enregistrements et dans ce cas, cela parait logique.

    Combien as-tu d'enregistrements dans chaque table ? Si dans T_planning il n'y a qu'un seul enregistrement, c'est possible que la requête fonctionne telle quelle, sans jointure, tu peux éventuellement essayer en prenant soin de sauvegarder ta table T_Personnel avant.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    J'ai dû mal m'exprimer.

    L'objectif est de supprimer les données des 8 champs Heure1MA à HeureR2AM situés dans la table T_Planning si la personne ne fait plus partie de l'entreprise, donc après la DateSortie (date à laquelle la personne quitte la société) et si la case "Sortie" est cochée, ces deux informations se trouvant dans la table T_Personnel

    La table T_Planning contient les horaires de début et fin de travail (jusqu'à 4 plages donc par journée) pour chaque jour et chaque membre du personnel elle compte à ce jour 15000 entrées.

    J'avais mal regardé, il existe une jointure que je peux mettre entre idEmployé de T_Planning et NumPersonnel de T_Personnel, je l'ai mise.

    La Table T_Personnel contient les informations pour chaque membre du personnel (nom, prenom etc etc..)

    C'est donc bien des données situées dans T_Planning que je veux supprimer.

    Donc j'en suis là en mode création:
    Nom : Capture1.JPG
Affichages : 2045
Taille : 111,5 Ko
    on voit sur cette copie d'écran l'intégralité de la requête.

    Voici le code en mode SQL:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Planning.Heure1MA, T_Planning.Heure2MA, T_Planning.Heure1AM, T_Planning.Heure2AM, T_Planning.HeureR1MA, T_Planning.HeureR2MA, T_Planning.HeureR1AM, T_Planning.HeureR2AM
    FROM T_Personnel INNER JOIN T_Planning ON T_Personnel.NumPersonnel = T_Planning.IdEmploye
    WHERE (((T_Planning.Heure1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]));

    et le résultat en mode feuille de donnée, qui correspond aux valeurs que je veux supprimer :
    Nom : Capture2.JPG
Affichages : 1991
Taille : 65,8 Ko

    voilà j'espère avoir été plus clair..

    J'ai essayé ton code, mais en changeant la première table qui est celle dans laquelle il faut supprimer les données :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Personnel.NumPersonnel, T_Personnel.NomPersonnel, T_Personnel.PrenomPersonnel, T_Personnel.Sortie, T_Planning.DateJour, T_Planning.Heure1MA, T_Planning.Heure2MA, T_Planning.Heure1AM, T_Planning.Heure2AM, T_Planning.HeureR1MA, T_Planning.HeureR2MA, T_Planning.HeureR1AM, T_Planning.HeureR2AM
    FROM T_Personnel, T_Planning
    WHERE (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure1MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure2MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure1AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure2AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR1MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR2MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR1AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR2AM)<>""));

    et en mettant la même jointure que plus haut:
    j'obtiens aussi le message demandant de spécifier la table pour suppression...

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    C'est donc bien des données situées dans T_Planning que je veux supprimer.
    dans ce cas tu fait comme j'ai dit en changeant simplement le nom de la table:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE T_Planning.*
    FROM T_Planning INNER JOIN T_Personnel ON T_Planning.IdEmploye = T_Personnel.NumPersonnel
    WHERE (((T_Planning.Heure1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]));
    L'objectif est de supprimer les données des 8 champs Heure1MA à HeureR2AM situés dans la table T_Planning
    supprimer les enregistrements ou effacer le contenu des champs ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut EXISTS
    Bonsoir,

    C'est pas simple du tout les suppressions avec les jointures. Une possibilité c'est d'utiliser le terme EXISTS dans le where pour vérifier si la sous-requête renvoie une valeur (condition true):

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DELETE T_Planning.*
    FROM T_Planning
    WHERE (Exists (select IdEmploye from T_Personnel WHERE (T_Planning.IdEmploye = T_Personnel.NumPersonnel) and (T_Personnel.Sortie=Yes) AND (T_Planning.DateJour>[T_Personnel]![DateSortie]))=True) 
    AND ((T_Planning.Heure1MA<>"") OR (T_Planning.Heure2MA<>"") OR (T_Planning.Heure1AM<>"") OR (T_Planning.Heure2AM<>"") OR (T_Planning.HeureR1MA<>"") OR (T_Planning.HeureR2MA<>"") OR (T_Planning.HeureR1AM<>"") OR (T_Planning.HeureR2AM<>""));

    La structure est donc de la forme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE T_Planning.*
    FROM T_Planning 
    WHERE (EXISTS (select IdEmploye from T_Personnel WHERE (T_Planning.IdEmploye = T_Personnel.NumPersonnel) and ...)=true) and ((T_Planning.Heure1MA<>"") OR ...);

    Fais bien une sauvegarde de tes données avant de l'exécuter.

    Code SQL corrigé il y avait une erreur.

    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  8. #8
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    dans ce cas tu fait comme j'ai dit en changeant simplement le nom de la table:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE T_Planning.*
    FROM T_Planning INNER JOIN T_Personnel ON T_Planning.IdEmploye = T_Personnel.NumPersonnel
    WHERE (((T_Planning.Heure1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.Heure2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2MA)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR1AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie])) OR (((T_Planning.HeureR2AM)<>"") AND ((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]));

    supprimer les enregistrements ou effacer le contenu des champs ?
    les deux peuvent faire... au minimum effacer le contenu , mais si on supprime les enregistrements je ne pense pas que cela pose un problème.

    Ceci dit , malheureusement en mettant ton code toujours le vilain message

  9. #9
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par User Voir le message
    Bonsoir,

    C'est pas simple du tout les suppressions avec les jointures. Une possibilité c'est d'utiliser le terme EXISTS dans le where pour vérifier si la sous-requête renvoie une valeur (condition true):

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DELETE T_Planning.*
    FROM T_Planning
    WHERE (Exists (select IdEmploye from T_Personnel WHERE (T_Planning.IdEmploye = T_Personnel.NumPersonnel) and (T_Personnel.Sortie=Yes) AND (T_Planning.DateJour>[T_Personnel]![DateSortie]))=True) 
    AND ((T_Planning.Heure1MA<>"") OR (T_Planning.Heure2MA<>"") OR (T_Planning.Heure1AM<>"") OR (T_Planning.Heure2AM<>"") OR (T_Planning.HeureR1MA<>"") OR (T_Planning.HeureR2MA<>"") OR (T_Planning.HeureR1AM<>"") OR (T_Planning.HeureR2AM<>""));

    La structure est donc de la forme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE T_Planning.*
    FROM T_Planning 
    WHERE (EXISTS (select IdEmploye from T_Personnel WHERE (T_Planning.IdEmploye = T_Personnel.NumPersonnel) and ...)=true) and ((T_Planning.Heure1MA<>"") OR ...);

    Fais bien une sauvegarde de tes données avant de l'exécuter.

    Code SQL corrigé il y avait une erreur.

    Cdlt,
    Cela fonctionne, mais je n'ai pas le même resultat qu'une autre requête qui pour moi est censée faire la même chose, càd regarder les enregistrements présents après la date de sortie.. elle en sort sensiblement plus ...

    je ne comprends pas cette différence.. peux tu m'éclairer?

    le code de la requête selection "de controle":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Planning.NumPlanning, T_Personnel.NumPersonnel, T_Personnel.NomPersonnel, T_Personnel.PrenomPersonnel, T_Personnel.DateSortie, T_Personnel.Sortie, T_Planning.DateJour, T_Planning.Heure1MA, T_Planning.Heure2MA, T_Planning.Heure1AM, T_Planning.Heure2AM, T_Planning.HeureR1MA, T_Planning.HeureR2MA, T_Planning.HeureR1AM, T_Planning.HeureR2AM
    FROM T_Personnel, T_Planning
    WHERE (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure1MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure2MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure1AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure2AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR1MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR2MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR1AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR2AM)<>""));

    en mode création:
    Nom : Capture1.JPG
Affichages : 1985
Taille : 108,7 Ko

    et le résultat :
    Nom : Capture2.JPG
Affichages : 1965
Taille : 94,5 Ko
    le premier numplanning affiché est 85

    et quand le fais tourner sur la même base de donnée bien sûr ta requête passée en requête selection, le commence sur des enregistrements beaucoup plus haut (1089) :
    Nom : Capture3.JPG
Affichages : 1946
Taille : 67,3 Ko

    je ne comprends pas cet différence..

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonjour,
    et quand le fais tourner sur la même base de donnée bien sûr ta requête passée en requête selection, le commence sur des enregistrements beaucoup plus haut (1089) :
    as-tu précisé un ordre de tri ?

    peux-tu poster la base (compressée au format .ZIP ou .RAR) avec les 2 tables sans données confidentielles ( supprimer ou effacer le contenu de Nom et PrenomPersonnel, Matricule, date de naissance etc.) ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    non, je n'ai pas mis de tri.

    Voici la base test avec les 2 tables et les 2 requêtes

    base test.zip

  12. #12
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    la requête de suppression RequêteTestSuppression est correcte, il y a 2 employés dont la date de sortie est alimentée et elle affiche bien les heures de ces 2 employés.
    dans la première requête il y a 11776 enregistrements sélectionnés c'est une erreur car il devrait y en avoir 471 comme pour la requête de suppression: en effet il manque la jointure entre les 2 tables avec NumPersonnel de T_Personnel et IdEmploye de T_Planning ce qui provoque un cartésien (nombre d'enregistrements de la première table multiplié par le nombre d'enregistrements de la seconde).
    Voici la requête R_ControlePlanningPostSortie corrigée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T_Planning.NumPlanning, T_Personnel.NumPersonnel, T_Personnel.NomPersonnel, T_Personnel.PrenomPersonnel, T_Personnel.DateSortie, T_Personnel.Sortie, T_Planning.DateJour, T_Planning.Heure1MA, T_Planning.Heure2MA, T_Planning.Heure1AM, T_Planning.Heure2AM, T_Planning.HeureR1MA, T_Planning.HeureR2MA, T_Planning.HeureR1AM, T_Planning.HeureR2AM
    FROM T_Personnel INNER JOIN T_Planning ON T_Personnel.NumPersonnel = T_Planning.IdEmploye
    WHERE (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure1MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure2MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure1AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.Heure2AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR1MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR2MA)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR1AM)<>"")) OR (((T_Personnel.Sortie)=Yes) AND ((T_Planning.DateJour)>[T_Personnel]![DateSortie]) AND ((T_Planning.HeureR2AM)<>""));
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    une question: pourquoi ne pas supprimer tous les enregistrements d'un employé parti ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  14. #14
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    une question: pourquoi ne pas supprimer tous les enregistrements d'un employé parti ?
    pour garder un historique... pendant un certain temps.
    j'ai fait une autre macro qui me permet de supprimer tous les enregistrements de planning de tous les employés, pour purger la table planning avant une date que l'on indique (histoire de ne pas trop alourdir la base...)
    Je regarde ce que cela donne et te dis

  15. #15
    Membre confirmé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Points : 570
    Points
    570
    Par défaut
    C'est bon maintenant, j'étais passé à coté de cette jointure ...

    Tout fonctionne parfaitement.

    Merci à toi et à User pour votre aide précieuse

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

Discussions similaires

  1. [Toutes versions] Requête suppression basée sur un critère situé dans une autre table
    Par possible924 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/11/2014, 18h56
  2. Requete SQL avec jointure sur trois tables
    Par pit2121 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/05/2008, 23h07
  3. Variable d'une table dans une requete non basée sur cette table
    Par MickaelKael dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 22/10/2007, 09h46
  4. Réponses: 4
    Dernier message: 24/07/2007, 12h12
  5. Nouvelle bdd basée sur des tables existantes
    Par alyphe dans le forum Juridique
    Réponses: 6
    Dernier message: 04/07/2007, 11h12

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