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 09/09/2011, 17h14   #1
Invité de passage
 
Homme Benoit Laniez
Consultant informatique
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Benoit Laniez
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Benoit Laniez
Par défaut Requete d'ajout champ calculé

Bonjour,

J'ai un souci de requête d'ajout.

J'ai une table T_facture qui contient un champ TotalHT

J'ai une requête qui me fait le total HT de chaque facture (les enregistrements étant dans une table intermédiaire)
Lorsque j'execute en requête simple, il me sort parfaitement le total de chaque facture en fonction de l'IDFacture (clef primaire de ma table)

En revanche lorsque je fais la requête d'ajout, Access m'affiche une erreur de violation de clef, alors que je veux juste faire correspondre mon totalHT avec mon IDFacture.

Code :
1
2
3
4
INSERT INTO t_facture ( IDFacture, TotalHT )
SELECT t_facture.IDFacture, Sum(R_facture.totalHT) AS SumOftotalHT
FROM R_facture INNER JOIN t_facture ON R_facture.IDFacture = t_facture.IDFacture
GROUP BY t_facture.IDFacture;
Merci d'avance pour votre aide
Benoit Laniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 17h23   #2
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 256
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 1 256
Points : 1 872
Points : 1 872
Bonjour,

Cette requete essaie d'insérer une nouvelle ligne d'entete pour chaque facture existante donc ça crée des doublons > violation de clés

Il faut faire un update ou insérer dans une autre table
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 17h33   #3
Invité de passage
 
Homme Benoit Laniez
Consultant informatique
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Benoit Laniez
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Benoit Laniez
Merci, c'est bien ce que je pensais. Par contre (je vais passer pour un débutant) je ne sais pas comment le faire.

Quel critère dois je mettre dans ma requête pour qu'il aille écrire l'enregistrement pour la bonne facture ?

J'ai essayé ça, mais ça ne marche pas

Code :
UPDATE t_facture INNER JOIN R_total_facture ON t_facture.IDFacture = R_total_facture.IDFacture SET t_facture.TotalHT = [R_total_facture].[SumOftotalHT];
Benoit Laniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 19h09   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 620
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 620
Points : 30 945
Points : 30 945
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Cela n'a rien à voir avec la question, car on ne stocke jamais le total d'une facture, pourquoi ?

C'est information est redondante, car tu peux l'avoir autrement, donc cela alourdit la base inutilement, il suffit de la calculer lorsque tu en as besoin (par une requête ou un état).

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 19h16   #5
Invité de passage
 
Homme Benoit Laniez
Consultant informatique
Inscription : mai 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Benoit Laniez
Localisation : France, Bas Rhin (Alsace)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mai 2011
Messages : 6
Points : 1
Points : 1
Envoyer un message via MSN à Benoit Laniez
Phillipe,

Je ne suis pas totalement d'accord. J'utilise ma base Access afin de faire également un prévisionnel, + un état N-1. Et j'ai besoin d'un montant de facture qui ne bouge plus. En sahant que je facture des heures, mais que le montant peut évoluer au fil des années, sans changer l'intitulé

Maintenant j'ai trouvé la solution :

Il n'est pas possible d'intégrer un champ calculé dans une table (ce n'est pas moi qui le dit, mais Microsoft). J'ai donc créé une table intermédiaire qui me stock mon montant, et ensuite je fais un update de la table intermédiaire à la table Facture.

Merci quand même pour l'aide du forum
Benoit Laniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 16h34   #6
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 256
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 1 256
Points : 1 872
Points : 1 872
La table intermédiaire n'est pas nécessaire, le sql permet plein de possibilités par exemple :

Code :
UPDATE t_facture SET TotalHT = (select sum(totalHT) from Rfacture where R_facture.IDFacture = t_facture.IDFacture)
3 remarques :
- l'info est redondante comme indiqué par Philippe
- les 2 champs totalHT ont le même nom mais pas le même contenu
- cette requête met à jour toute la table alors qu'il est probable qu'une seule facture a été modifiée > ajouter une condition WHERE
nico84 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 01h27.


 
 
 
 
Partenaires

Hébergement Web