Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2008, 18h11   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 1
Points : 1
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 :
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.
Sylvain74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 11h29   #2
Scorpi0
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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
  Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 17h26   #3
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 1
Points : 1
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 :
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 :
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?
Sylvain74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 11h54   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 793
Points : 17 793
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 14h52   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 034
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 034
Points : 18 326
Points : 18 326
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2008, 08h35   #6
Invité de passage
 
Inscription : septembre 2008
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 3
Points : 1
Points : 1
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 :
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!
Sylvain74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h21.


 
 
 
 
Partenaires

Hébergement Web