|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() |
Bonjour,
J'aimerais dans une table insérer une données si celles ci n'existe pas ou bien si elle existe la mettre à jour. Je souhaiterais donc trouver une instruction qui combine les deux. Après quelques recherches infructueuses, j'ai trouvé la fonction "Exists" qui à l'air de très bien correspondre mais visiblement elle n'est pas dispo sur Access... Avez-vous un plan B ? Merci |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour Mut,
Si j'ai bien compris, tu as une table T1 qui contient des enregistrements présents ou non dans une table T2, via un champ Clé (clé unique) ; si ceux-ci sont présents, alors mise à jour de T2, sinon, création dans T2. Suggestion (via l'assistant, ça va tout seul) :
Attention :
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() |
Merci de ta réponse.
Cependant je bloque encore sur la requete insert. En fait ce n'est pas "Est null" qu'il faut que je mette mais plutot " not exist" car la clé de la table T1 n'est pas (encore) présente dans la table T2. Il faut justement l'insérer... |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Citation:
Je te suggère de faire le test.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() |
Effectivement...j'ai testé la requete select et ça à l'air de fonctionner...mon problème est du au fait que ma table T2 est composé de deux clés primaires (les clés étrangères de deux tables....+ un champ) et donc c'est la table T3 qui semble poser problème car si je l'ajoute dans la requete pour utiliser des champs afin d'effectuer un calcul, j'ai le problème des jointures ambigues...
En résumé, j'ai trois table : T1,T2,T3 reliés entre elles. T1 à une clé unique tout comme T3. T2 reprend les clés primaires de T1 et T3 formant ainsi sa clé primaire (donc constituée de deux champs) + un champ "tarif". Ce que je cherche à faire c'est mettre à jour ou insérer des enregistrements dans T2 suivant des momdifications et/ou ajouts dans les tables T1 et T3. |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Je n'ai pas bien compris.
Peux-tu poster les structures de l'ensemble des tables concernées (uniquement leur(s) clé(s) primaire(s)) et une petite description ?
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() |
Ouai effectivement c'était pas clair, j'ai édité mon message en espérant que ce soit un peu mieux.....
Pour l'instant avec ton aide la mise à jour se passe très bien. Ca fonctionne. Le probleme est au niveau de l'insertion car en fait dans le "select" de la requete INSERT l'ajout doit se faire sur dans la table T2 (trois champs : les clés primaire de la table T1 et T3 + une valeur (tarif) determinée en fonction de champs dans la table T3 et T1). Le tarif est donc calculé dans la requete insert (avant d'etre insérer dans T2) par le biais de champs de la table T1 et T3. Je n'arrive donc pas à recupérer dans mon "SELECT" de la requete INSERT, l'ensemble des champs à insérer dans T2 |
|
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Tu as modifié ton post en même temps que je te demandais les structures : OK.
Citation:
- tous les enregistrements de T1 sont-ils, forcément, présents dans T3 ? - tous les enregistrements de T3 sont-ils, forcément, présents dans T1 ?
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
00
|
|
|
#9 |
|
Membre confirmé
![]() |
Non, en fait voici comment c'est structuré :
T1(T1Key,NbHeure) ---------------T2(T1Key,T3Key,Tarif)------------T3(T3Key,Prix) Le tarif se calcule en fonction du prix de T3 et du Nbheure de T1.il fait parti des valeurs que je dois insérer... |
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Il n'y a qu'un seul "non", dans ta réponse : j'en conclut qu'il se rapporte à mes deux questions :
- tous les enregistrements de T1 sont-ils, forcément, présents dans T3 ? ==> non. - tous les enregistrements de T3 sont-ils, forcément, présents dans T1 ? ==> non. Tu as bien une table T0 structurée comme suit : - T0Key (clé primaire) - Désignation ... ==> et qui contiendrait forcément tous les T1Key et tous les T3Key, non ?
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 415 ![]() |
bonjour,
j'ai pas bien saisi tout ce qui se passe dans ce fil , mais...Citation:
Enfin bon, je vous dit ça comme ça hein
__________________
L'informatique fait son grand retour au lycée... |
|
|
00
|
|
|
#12 | ||
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonsoir Fabien,
Je peux me tromper, mais le problème de Mut me semble être plus méthodologique que syntaxique : Citation:
Citation:
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
||
|
|
00
|
|
|
#13 |
|
Membre confirmé
![]() |
Effectivement, mon problème doit se situer entre les deux visiblement....
Et oui le "non" correspond bien à tes deux questions car en fait T1 et T3 n'ont pas de liens direct entre elles.Seule la table T2 les relie entre elles avec les deux clés primaires (de T1 et T3) + un champ calculé....et je n'ai donc pas de table T0 qui contienne toutes les T1Key et les T3Key. T1=====> 0,N T2 0,N<==========T3 T2 prend donc les deux clés primaire de T1 et T3 + un champ "tarif" qui est calculé en fonction d'autres champs de T1 et T3 En fait ta fonction SQL insert fonctionne bien mais il faudrait ajouter une clause WHERE dessus ! |
|
|
00
|
|
|
#14 |
|
Membre confirmé
![]() |
J'ai trouvé un lien qui me conviendrait parfaitement à ce que je souhaite faire mais j'ai pas l'impression que ça fonctionne sous Access....
exemple ici |
|
|
00
|
|
|
#15 | |
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 415 ![]() |
Bonjour,
Citation:
Quels sont les couples à former dans T2 ? : L10, L30 ? L10, L31 ? L11, L30 ? L11, L31 ? L12, L30 ? L12, L31 ? 6 possibilités !
__________________
L'informatique fait son grand retour au lycée... |
|
|
00
|
|
|
#16 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Bonjour à tous,
Le point central est celui-ci : Citation:
L'idée est de partir d'une table qui contiendrait un enregistrement par xxKey et de la lier à T1 et T3 (via un LEFT JOIN), l'exploitation finale sera alors aisée.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
00
|
|
|
#17 | ||
|
Membre confirmé
![]() |
Citation:
Citation:
J'ai réglé mon soucis en passant par du vba pour l'instant....mais je souhaitais tout faire en SQL ! Le problème étant assez "tordu" je vais l'expliquer en étant plus explicite : La table T1 representes des "Taches" avec comme champs : CodeTache,Nbheure, Type, genre. La table T3 est une table "clients" avec comme champs : CodeClient,etc,etc... Mon probleme est là : pour chaque client correspond un tarif de taches qui varie selon le nb d'heure, le type, le genre (et donc le client évidemment). Un tarif est négocié par genre et type de tache pour x heures. Il n'est pas envisageable pour l'utilisateur de lui faire remplir le tarif pour chaque type de taches par client (y'en aurait beaucoup trop !) c'est pourquoi j'ai crée cette table T2 (association de T1 et T3) que je souhaite remplir automatiquement pour le tarif qui me sera bien utile pour facilité les traitements par la suite. |
||
|
|
00
|
|
|
#18 | ||
|
Expert Confirmé Sénior
![]() ![]() Fabien Enseignant Inscription : janvier 2009 Messages : 2 415 ![]() |
Code sql :
renverra le tarif de chaque tache pour le client "toto". Le tout sans table T2.
__________________
L'informatique fait son grand retour au lycée... |
||
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 176 ![]() |
Je me fourvoyais donc, pensant que les xxKey désignaient le même type d'entité sans doute à cause de l'objet du fil (EXISTS) qui, en final, n'intervient pas dans le problème soulevé.
Pour arriver à l'exemple de Fabien, une astuce existe en créant la requête suivante (via l'assistant) : - ajouter la table T3 (FROM) ; - ajouter la table T1 (FROM) ; - ne pas les lier entre elles (c'est ça, l'astuce) ; - sélectionner les champs CodeClient et CodeTache (SELECT). ==> tu devrais obtenir, pour chaque client, l'ensemble des tâches disponibles.
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#20 | ||
|
Membre confirmé
![]() |
Citation:
tache(0001,semaine,vente,5h) pour codeTache,Type,genre,NbHeure client(0001,500,600,700) pour codeClient, PrixVenteSemaine7h,PrixVenteDimanche7h,PrixVenteJourFerie7h Sachant que dans "tache", à la place de "vente" on peut avoir une autre action comme par exemple "livraison" et dans ce cas la il y aura aussi un prixlivraisonsemaine7h, prixlivraisondimanche7h etc.... dans la table client. Citation:
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com