Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
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 06/09/2011, 10h00   #1
Membre chevronné
 
Inscription : septembre 2008
Messages : 798
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2008
Messages : 798
Points : 675
Points : 675
Par défaut Requete de MAJ

Bonjour à tous,

J'ai une application avec une table de logs, où j'ai les heures de login et logoff. Parfois, pour une raison quelconque, lors qu'un utilisateur ferme sa base, l'heure de logoff n'est pas enregistré. J'ai donc fait deux requetes:

Une pour trouver les utilisateurs qu'on plus d'un log actif:
Code sql :
1
2
3
4
SELECT T_logs.Mec, T_logs.Application, Count(T_logs.Log) AS nb_sessions, Min(T_logs.TimeIn) AS heure
FROM T_logs
GROUP BY T_logs.Mec, T_logs.Application, T_logs.TimeOff
HAVING (((T_logs.TimeOff) IS NULL));

et l'autre pour enregistrer le logoff de ces utilisateurs:
Code sql :
1
2
UPDATE R_logs_actifs LEFT JOIN T_logs ON (R_logs_actifs.heure = T_logs.TimeIn) AND (R_logs_actifs.Mec = T_logs.Mec) SET T_logs.TimeOff = Now()
WHERE (((R_logs_actifs.nb_sessions)>1));

Le problème c'est qui quand je lance la requete de MAJ j'ai la message d'erreur suivant:
L'opération doit utiliser une requête qui peut être mise à jour


Est-ce que quelqu'un sait comment resoudre ça?

Merci d'avance pour votre aide
Marc_27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 11h25   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Bonjour Marc_27,

Juste pour information (pas d'incidence grave sur la requête en elle-même). A la place de :
Code sql :
1
2
3
4
SELECT T_logs.Mec, T_logs.Application, Count(T_logs.Log) AS nb_sessions, Min(T_logs.TimeIn) AS heure
FROM T_logs
GROUP BY T_logs.Mec, T_logs.Application, T_logs.TimeOff
HAVING (((T_logs.TimeOff) IS NULL));
il vaut mieux
Code sql :
1
2
3
4
SELECT T_logs.Mec, T_logs.Application, Count(T_logs.Log) AS nb_sessions, Min(T_logs.TimeIn) AS heure
FROM T_logs
WHERE T_logs.TimeOff IS NULL
GROUP BY T_logs.Mec, T_logs.Application, T_logs.TimeOff;
==> "Où", dans l'assistant. En effet, il vaut mieux éliminer les "T_logs.TimeOff IS NULL" avant que Access ne les inclue dans un groupe.


D'autre part, concernant le fameux et désormais célèbre message "L'opération doit utiliser une requête qui peut être mise à jour" dans ta requête UPDATE, si, pour un enregistrement de R_logs_actifs, tu peux avoir plusieurs enregistrements de T_logs, ou l'inverse, avec la jointure indiquée, alors Access refusera de déclencher l'UPDATE. Cet UPDATE n'est possible que s'il y a une relation 1,1 entre les deux tables/requêtes.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 11h34   #3
Membre chevronné
 
Inscription : septembre 2008
Messages : 798
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2008
Messages : 798
Points : 675
Points : 675
Merci Richard,


En fait j'ai résolu le soucis par biais de ma base SQL Server:
Tous les tables de mon application sont des tables liées depuis une base SQL Server. J'ai donc remplacé la première requete (de selection) par une View SQL Server et la liée à ma base Access. Là Access la considére comme étant une table, et la requete de MAJ marche bien.

C'était pour ça qui j'avais mis Délestage...

Mais merci encore une fois
Marc_27 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 11h49   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
OK.

Il n'empêche qu'il est important de savoir que le WHERE s'effectue AVANT le groupage alors que le HAVING s'effectue APRES.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 12h01   #5
Membre chevronné
 
Inscription : septembre 2008
Messages : 798
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : septembre 2008
Messages : 798
Points : 675
Points : 675
Marc_27 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 21h51.


 
 
 
 
Partenaires

Hébergement Web