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 mise à jour d'un enregistrement en cours avec l'enregistrement de la veille


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut Requete mise à jour d'un enregistrement en cours avec l'enregistrement de la veille
    Bonjour

    Je souhaite recopier les valeurs des champs d'une table (T_Examens avec champ autonumber ID_examen) de la date de la veille dans ceux de la date du jour (Date_Prescription)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE  T_examens SET T_examens.NFS_J0 = [T_examens]![NFS_J0]
    WHERE (((T_examens.ID_Examen)=[Formulaires]![F_prescriptions]![SF_Traitement].[Formulaire]![ID_examen]) AND ((T_examens.date_prescription)=[Formulaires]![F_prescriptions]![SF_Traitement].[Formulaire]![date_prescription]-1));
    Mais bien sûr cela ne fonctionne pas. J'imagine plutot un truc du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    UPDATE  Matable
    SET (Champ1, Champ2) = (SELECT Champ1, Champ2 
              FROM Matable
                        WHERE ID_Examen = ID_Examen à modifier )
    WHERE EXISTS(SELECT Champ1, Champ2
              FROM Matable
                        WHERE ID_Examen = ID_Examen à copier )
    Merci pour vos suggestions

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    Il faut utiliser des alias pour distinguer les 2 emplois de la même table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE  Matable A
    SET (Champ1, Champ2) = (SELECT Champ1, Champ2 
              FROM Matable B WHERE B.Date_Prescription = A.Date_Prescription-1)
    WHERE A.Date_Prescription=date()
    C'est à affiner pour que le select trouve 1 et un seul enregistrement par ligne de A...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Merci Nico pour ton conseil mais je croyais que les alias étaient caractérisés par "AS" ?

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    C'est exact mais je crois que c'est accepté aussi sans AS

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Je comprends progressivement la logique. Voici donc la mienne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE R_Examens AS A SET NFS_J0 = (SELECT NFS_J0 FROM R_Examens
     AS B WHERE  B.Date_Prescription=([Formulaires]![F_prescriptions]![SF_Traitement]![Date_Prescription])-1
     AND B.ID_sejour= [Formulaires]![F_prescriptions]![SF_Traitement]![ID_sejour])
    WHERE A.Date_Prescription=[Formulaires]![F_prescriptions]![SF_Traitement]![Date_Prescription] 
    AND A.ID_sejour= [Formulaires]![F_prescriptions]![SF_Traitement]![ID_sejour];
    Malheureusement, il me dit qu'i faut que j'utilise une requête qui peut être mise à jour. Pourtant, le code suivant fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE R_Examens AS A SET NFS_J0 = "Ca marche"
    WHERE A.Date_Prescription=[Formulaires]![F_prescriptions]![SF_Traitement]![Date_Prescription] 
    AND A.ID_sejour= [Formulaires]![F_prescriptions]![SF_Traitement]![ID_sejour];
    Donc la partie en erreur est dans le SELECT. Erreur de syntaxe ?

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 724
    Points : 57 417
    Points
    57 417
    Billets dans le blog
    42
    Par défaut
    bonsoir,

    on peut essayer une solution avec auto-jointure:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE R_Examens AS A
           INNER JOIN R_Examens AS B
                   ON A.ID_sejour = B.ID_sejour
    SET    A.NFS_J0 = B.NFS_JO
    WHERE  A.Date_Prescription = [Formulaires]![F_prescriptions]![SF_Traitement]![Date_Prescription]
           AND B.Date_Prescription = ( [Formulaires]![F_prescriptions]![SF_Traitement]![Date_Prescription] ) - 1
           AND A.ID_sejour = [Formulaires]![F_prescriptions]![SF_Traitement]![ID_sejour];

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Bingo ! C'est excellent !
    Mais simplement si je dois traiter plusieurs champs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE R_Examens AS A INNER JOIN R_Examens AS B ON A.ID_sejour = B.ID_sejour SET A.NFS_J0 = B.NFS_J0, A.NFS_J1 = B.NFS_J1
    WHERE A.Date_Prescription = [Formulaires]![F_prescriptions]![SF_Traitement]![Date_Prescription]
           AND B.Date_Prescription = ( [Formulaires]![F_prescriptions]![SF_Traitement]![Date_Prescription] ) - 1
           AND A.ID_sejour = [Formulaires]![F_prescriptions]![SF_Traitement]![ID_sejour];
    Cela fonctionne mais s'il y a 20 champs, il faut écrire 20 fois le signe égal ou n'y a-t-il pas plus simple ?

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 724
    Points : 57 417
    Points
    57 417
    Billets dans le blog
    42
    Par défaut
    en SQL je ne vois pas d'autres solutions.

    On peut toujours bidouiller en VBA avec des recordset en bouclant: rst.fields(i).value= ... avec i=0,1,2, ...

    dire que c'est plus "simple"...

Discussions similaires

  1. [debutant] Probleme requete mise à jour
    Par titocv723 dans le forum Access
    Réponses: 2
    Dernier message: 10/10/2006, 11h05
  2. [VBA] requete mise à jour
    Par tomtree dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 13/09/2006, 16h42
  3. Requete Mise à jour
    Par liop49 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/08/2006, 16h59
  4. [requete]mise à jour entre table
    Par Greg84 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2006, 15h18
  5. Requete mise à jour:erreur affichage sur formulaire
    Par milielf dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/07/2006, 11h25

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