OVH Cloud OVH Cloud

Requête mise à jour (Update query)

2 réponses
Avatar
Vincent BD
J’ai une table reprenant les contrats avec[IDF TR], [Contrat N°],
[ContratDurée] (Indéterminée ou déterminée), [DatedeDébut], [DatedeFin] (vide
si Indéterminée), [Actif] (Oui/Non).
Chaque jour une macro désactive un contrat lorsque la [DatedeFin] < Date().
Cela fonctionne très bien pour les contrats à durée déterminée.
Mais il arrive qu’un nouveau contrat à durée indéterminée soit fait alors
qu’il existe déjà un précédent contrat à durée indéterminée, dans le cas d’un
changement de salaire horaire par exemple. Il faut donc ajouter une
[DatedeFin] au premier contrat, date qui sera la [DatedeDébut]-1 du nouveau
contrat à durée indéterminée.

Par une première requête ([Trav Contrat 71]), j’extrais les éléments
nécessaires :
SELECT Min([Trav Contrat].[Contrat N°]) AS [Contrat+Jeune], Max([Trav
Contrat].[Date de début]) AS FinPlusVieille
FROM [Trav Contrat]
WHERE ((([Trav Contrat].[Date de fin]) Is Null) AND (([Trav
Contrat].ContratDurée)="indéterminée") AND (([Trav Contrat].Actif)=Yes))
GROUP BY [Trav Contrat].[IDF TR]
HAVING (((Count([Trav Contrat].[Contrat N°]))>1))
ORDER BY [Trav Contrat].[IDF TR], Max([Trav Contrat].[Date de début]);

Avec une seconde requête mise à jour, j’essaie de mettre la table à jour,
mais j’ai un message d’erreur comme quoi « Opération must use an updatable
query »
UPDATE [Trav Contrat] INNER JOIN [Trav Contrat 71] ON [Trav
Contrat].[Contrat N°] = [Trav Contrat 71].[Contrat+Jeune] SET [Trav
Contrat].[Date de fin] = ([Trav Contrat 71].FinPlusVieille);

D’avance merci.

2 réponses

Avatar
ze_titi
Bonjour aussi...

d'après moi, le "INNER JOIN" dans une requête UPDATE n'est pas très
recommandable. Il faudrait reformuler la requête.

UPDATE [Trav contrat], [Trava contrat 71] SET [Trav contrat].[Date de
fin]=[Trav contrat71.Finplusvieille WHERE [Trav contrat].[Contrat n°]=[Trav
contrat 71].[Contrat+Jeune]

--
Cordialement,

ze_titi

Mail perso: http://www.cerbermail.com/?sj4KuQC4GQ




J’ai une table reprenant les contrats avec[IDF TR], [Contrat N°],
[ContratDurée] (Indéterminée ou déterminée), [DatedeDébut], [DatedeFin] (vide
si Indéterminée), [Actif] (Oui/Non).
Chaque jour une macro désactive un contrat lorsque la [DatedeFin] < Date().
Cela fonctionne très bien pour les contrats à durée déterminée.
Mais il arrive qu’un nouveau contrat à durée indéterminée soit fait alors
qu’il existe déjà un précédent contrat à durée indéterminée, dans le cas d’un
changement de salaire horaire par exemple. Il faut donc ajouter une
[DatedeFin] au premier contrat, date qui sera la [DatedeDébut]-1 du nouveau
contrat à durée indéterminée.

Par une première requête ([Trav Contrat 71]), j’extrais les éléments
nécessaires :
SELECT Min([Trav Contrat].[Contrat N°]) AS [Contrat+Jeune], Max([Trav
Contrat].[Date de début]) AS FinPlusVieille
FROM [Trav Contrat]
WHERE ((([Trav Contrat].[Date de fin]) Is Null) AND (([Trav
Contrat].ContratDurée)="indéterminée") AND (([Trav Contrat].Actif)=Yes))
GROUP BY [Trav Contrat].[IDF TR]
HAVING (((Count([Trav Contrat].[Contrat N°]))>1))
ORDER BY [Trav Contrat].[IDF TR], Max([Trav Contrat].[Date de début]);

Avec une seconde requête mise à jour, j’essaie de mettre la table à jour,
mais j’ai un message d’erreur comme quoi « Opération must use an updatable
query »
UPDATE [Trav Contrat] INNER JOIN [Trav Contrat 71] ON [Trav
Contrat].[Contrat N°] = [Trav Contrat 71].[Contrat+Jeune] SET [Trav
Contrat].[Date de fin] = ([Trav Contrat 71].FinPlusVieille);

D’avance merci.


Avatar
Vincent BD
Désolé, même résultat : « Opération must use an updatable query ».


Bonjour aussi...

d'après moi, le "INNER JOIN" dans une requête UPDATE n'est pas très
recommandable. Il faudrait reformuler la requête.

UPDATE [Trav contrat], [Trava contrat 71] SET [Trav contrat].[Date de
fin]=[Trav contrat71.Finplusvieille WHERE [Trav contrat].[Contrat n°]=[Trav
contrat 71].[Contrat+Jeune]

--
Cordialement,

ze_titi

Mail perso: http://www.cerbermail.com/?sj4KuQC4GQ




J’ai une table reprenant les contrats avec[IDF TR], [Contrat N°],
[ContratDurée] (Indéterminée ou déterminée), [DatedeDébut], [DatedeFin] (vide
si Indéterminée), [Actif] (Oui/Non).
Chaque jour une macro désactive un contrat lorsque la [DatedeFin] < Date().
Cela fonctionne très bien pour les contrats à durée déterminée.
Mais il arrive qu’un nouveau contrat à durée indéterminée soit fait alors
qu’il existe déjà un précédent contrat à durée indéterminée, dans le cas d’un
changement de salaire horaire par exemple. Il faut donc ajouter une
[DatedeFin] au premier contrat, date qui sera la [DatedeDébut]-1 du nouveau
contrat à durée indéterminée.

Par une première requête ([Trav Contrat 71]), j’extrais les éléments
nécessaires :
SELECT Min([Trav Contrat].[Contrat N°]) AS [Contrat+Jeune], Max([Trav
Contrat].[Date de début]) AS FinPlusVieille
FROM [Trav Contrat]
WHERE ((([Trav Contrat].[Date de fin]) Is Null) AND (([Trav
Contrat].ContratDurée)="indéterminée") AND (([Trav Contrat].Actif)=Yes))
GROUP BY [Trav Contrat].[IDF TR]
HAVING (((Count([Trav Contrat].[Contrat N°]))>1))
ORDER BY [Trav Contrat].[IDF TR], Max([Trav Contrat].[Date de début]);

Avec une seconde requête mise à jour, j’essaie de mettre la table à jour,
mais j’ai un message d’erreur comme quoi « Opération must use an updatable
query »
UPDATE [Trav Contrat] INNER JOIN [Trav Contrat 71] ON [Trav
Contrat].[Contrat N°] = [Trav Contrat 71].[Contrat+Jeune] SET [Trav
Contrat].[Date de fin] = ([Trav Contrat 71].FinPlusVieille);

D’avance merci.