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 :

Sous-requête corrélée ne fonctionne pas


Sujet :

Access

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut Sous-requête corrélée ne fonctionne pas
    Bonjour,

    J'ai un souci avec une requête UPDATE avec sous-requête corrélée qui ne fonctionne pas, dans Access 2000 et 2007. Message : "l'opération doit utiliser une requête qui peut être mise à jour".

    Cette requête utilise les tables suivantes :
    Table Plannifications :
    • NumPlannif (clé primaire, n° auto.)
    • JourSem (numérique - octet)
    • Module (numérique - octet)
    • Matiere (texte)
    • DateDebutPlannif (date/hre)
    • DateFinPlannif (date/hre)
    • UneSemSurN (numérique - octet)


    Table Calendrier :
    • Date (clé primaire, Date/hre)
    • Module (clé primaire, numérique - octet)
    • NumPlannif (numérique - entier long)


    La table Calendrier comporte tous les jours de l'année 2008-2009, avec 4 lignes (modules 1 à 4) pour chaque jour.
    L'objectif de ma requête est de mettre à jour le champ Calendrier.NumPlannif pour chaque module et chaque jour du calendrier qui correspond à une plannification dans la table Plannifications.


    Code de la requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    UPDATE Calendrier  as C 
    SET C.NumPlannif = 
     
    (select P.NumPlannif
    from Plannifications  as P
    where datepart("w",C.date)-1=P.JourSem
    and C.Module=P.Module
    and C.Date between P.DateDebutPlannif and P.DateFinPlannif)
     
    WHERE exists 
    (select P.NumPlannif
    from Plannifications as P  where 
    datepart("w",C.date)-1=P.JourSem
    and C.Module=P.Module
    and C.Date between P.DateDebutPlannif and P.DateFinPlannif);

    Quelqu'un a-t-il une idée sur la cause de cette erreur et sur une solution?
    Merci de votre aide.

  2. #2
    Scorpi0
    Invité(e)
    Par défaut
    Google te retournes pas mal de réponse sur ton message d'erreur.

    Quelques solutions ici :

    http://support.microsoft.com/kb/175168/fr

    ou ici :

    http://support.microsoft.com/kb/463266/fr

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut Je travaille directement dans la BDD Access
    Merci pour tes recherches Scorpio.

    Mais je travaille directement dans la BDD Access, sans utiliser ASP ni de table attachée ou autre.
    De plus, ça ne semble pas être un pb de droits d'accès, car un update simple sur Calendrier.NumPlannif fonctionne très bien. Exemple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Calendrier SET NumPlannif = 1;

    La requête select suivante fonctionne aussi très bien (c'est ma sous-requête, mais avec les 2 tables dans la clause FROM pour que la requête fonctionne sans la requête principale):

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT P.NumPlannif
    FROM Plannifications AS P, Calendrier AS C
    WHERE datepart("w",C.date)-1=P.Joursem
    and C.Module=P.Module
    and C.date between P.datedebutplannif and P.datefinplannif;

    Y a-t-il quelque chose qui cloche avec ma sous-requête corrélée?

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 034
    Billets dans le blog
    6
    Par défaut
    Oui : Access ! A ma connaissance ce genre de requête n'est pas possible avec Access...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    En créant une table temporaire qui sera remplie avec les enregistrements de la sous-requête, on devrait pouvoir ensuite modifier la table d'origine en cherchant les enregistrements voulus dans la seconde.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 3
    Par défaut Pb contourné avec un jeu d'enregistrements
    Bonjour,

    Puisque ce genre de requête ne semble pas pris en charge dans Access, j'ai contourné le pb avec un jeu d'enregistrements ADO sous VBA. Au passage, j'en ai profité pour gérer en plus les interventions qui ne sont plannifiées qu'une semaine sur 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Option Compare Database
    Option Explicit
     
    Function MajCalendrierAccessADO()
      Dim RS As New ADODB.Recordset
     
      RS.Open "SELECT * FROM Calendrier C, Plannifications P 
    where datepart('w',C.Date)-1=P.Joursem and C.Modul=P.Modul 
    and C.Date between  P.DateDebutPlannif AND P.DateFinPlannif
    order by C.Date, C.Modul", 
    CurrentProject.Connection, adOpenKeyset, adLockOptimistic, adCmdTableDirect
      'Module avec un e doit être un mot réservé car ne fonctionne pas'
      Do While Not RS.EOF
        If RS.Fields("RotationHebdo") = 1 Then
           RS.Fields("C.NumPlannif") = RS.Fields("P.NumPlannif")
           RS.Update
        Else
            If RS.Fields("RotationHebdo") = 2 Then
                If (RS.Fields("Date") - RS.Fields("PremiereSeance")) Mod 14 = 0 Then
                    RS.Fields("C.NumPlannif") = RS.Fields("P.NumPlannif")
                    RS.Update
                End If
            End If
        End If
        RS.MoveNext
      Loop
      RS.Close
      Set RS = Nothing
    End Function
    Voilà, un grand merci pour vos réponses!

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

Discussions similaires

  1. [AC-2003] Sous-requêtes qui ne fonctionnent pas
    Par Mimmie16 dans le forum Access
    Réponses: 2
    Dernier message: 29/08/2013, 14h54
  2. Requête récursive ne fonctionne pas sous VS
    Par Abdellah2010 dans le forum VB.NET
    Réponses: 1
    Dernier message: 16/09/2011, 09h52
  3. [MySQL] Ma requête SQL ne fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/01/2007, 13h41
  4. [ADO.Net][OleDb] Pourquoi ma requête access ne fonctionne pas?
    Par Bapt.ice dans le forum Accès aux données
    Réponses: 6
    Dernier message: 05/05/2006, 18h19

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