Requête mise à jour dans ACCESS 97 - SQL/NoSQL - Programmation
Marsh Posté le 15-04-2003 à 09:52:22
Poste donc ta requête, ça pourrait aider...
Marsh Posté le 15-04-2003 à 09:56:03
Harkonnen a écrit : Poste donc ta requête, ça pourrait aider... |
Je pense que c'est ce que tu aimerais: UPDATE R_Test, T_Personne SET T_Personne.NbJoursCode84 = [T_Personne]![NbJoursCode84]+[R_Test]![Test];
Marsh Posté le 15-04-2003 à 10:13:43
Moi je verrais plutot ça en 2 requêtes :
SELECT (T_Personne.NbJoursCode84 + R_Test.Test) As Calcul FROM T_Personne, R_Test
tu sauvegardes cette requête sous le nom "Req" par exemple
Puis tu fais ton Update :
UPDATE T_Personne,Req SET T_Personne.NbJoursCode84 = Req.Calcul
A tester, je sais pas ce que ça peut donner...
Marsh Posté le 15-04-2003 à 10:15:39
Harkonnen a écrit : Moi je verrais plutot ça en 2 requêtes : |
ok mais bon moi je travail pas en SQL, juste en ACCESS mais je peut créer une requête, aller en mode SQL, et copier ce que tu m'a mis!?^.^
Marsh Posté le 15-04-2003 à 10:18:39
tu seras surement obligé de faire une maccro, et dans la maccro tu dois pouvoir faire en sorte de démarrer une requête puis l'autre non?
Marsh Posté le 15-04-2003 à 10:22:29
Alors j'ai essayer ton idée Harkonnen, et ca ne fonctionne pas. J'ai fais 2 requête et en executant, il me dit que je vais modifier des données, jusque là ca va....
Et juste après il me redit: L'opération doit utiliser une requête qui peut être mise à jour.
Mince....!!!!
...............................................................
Ben je sais pas torp Urd....le blème c'est pas le fait qu'elle ne se suive pas je pense....en fait je sais pas du tout pourquoi ca fait ca!
Marsh Posté le 15-04-2003 à 10:25:32
Urd-sama a écrit : tu seras surement obligé de faire une maccro, et dans la maccro tu dois pouvoir faire en sorte de démarrer une requête puis l'autre non? |
c'est pas nécessaire... il y a un moyen de mettre le code de la requête a appeler dans le champ critère de la première requête^^ le soucis ne se pose pas là... mais plutot dans le type de requête utilisée^^
Marsh Posté le 15-04-2003 à 15:51:32
Halala.....plus j'y pense plus je ne comprends pas pourquoi ca ne fonctionne pas. Ca doit être possible de faire une requête mise a jour avec une autre requête sur un champ d'une table.
Ca m'enerve!!!
Marsh Posté le 16-04-2003 à 10:27:29
A force de réfléchire je suis arrivé à qqch mais ce n'est pas encore juste!
Puisque ACCESS me faisait un message d'erreur car il utilisait une requête qui ne pouvais pas être mis a jour, je me suis dis que j'allais mettre le résultat de cette requête dans un formulaire pour ensuite l'utiliser!
J'ai donc créer une zone de liste qui contient la valeure de la requête.
J'ai ensuite fais cette requête: UPDATE T_Personne SET T_Personne.NbJoursCode84 = [Formulaires]![F_Test]![Test];
(Le champs Test est la zone de liste qui contient la valeure à mettre a jour)
Bon cette fois il ne m'affiche plus de message mais il y a quand même un problème.
Pour la suite il faut savoir que mon champ "Test" (dans mon formulaire "F_Test" ) contient plusieurs valeure. Celle-ci sont avec un champ nommé "nompersonne". Dans ACCESS, cela donne comme ceci:
Nompersonne: Test:
Dubois 10
Favre 6
Chirac 8
Et ainsi de suite...
Le problème avec ma requête c'est qu'elle met a jour tout le monde avec le premier chiffre qu'elle voit...ce qui donne une fois la requête effectuée:
Dubois 10
Favre 10
Chirac 10
Alors qu'il devrai prendre les chiffre un par un suivant la personne...
Je sais pas si j'ai bien expliqué....en tout cas ca serait très gentil à vous de me répondre parceque je n'y arrive vraiment pas!:sweat:
Si vous ne comprennez pas qqch demander le moi^.^
Merci
Marsh Posté le 17-04-2003 à 07:44:47
UP!
Marsh Posté le 17-04-2003 à 10:55:51
Ta requête testée inititialement c'était celle-ci ?
UPDATE R_Test, T_Personne SET T_Personne.NbJoursCode84 = [T_Personne]![NbJoursCode84]+[R_Test]![Test];
Je vois pas de jointure/lien entre R_Test et T_Personne ?
UPDATE R_Test, T_Personne SET T_Personne.NbJoursCode84 = [T_Personne]![NbJoursCode84]+[R_Test]![Test]
where ... ?
Quant à cette requête
UPDATE T_Personne SET T_Personne.NbJoursCode84 = [Formulaires]![F_Test]![Test];
tu mets à jour le champ NbJoursCode84 pour toute la table
T_Personne, c pas ce que tu voulais je suppose ...
Donne les structures de tes 2 tables, on va bien arriver
à faire kkchose sans passer par un stockage dans
une liste
Marsh Posté le 17-04-2003 à 11:41:46
Merci de répondre vttman2!
Bon pour la requête initiale c'était ca oui...mais même avec une liaison il me mettait un message d'erreur!!^.^
Par contre pour l'autre oui tu as raison ca met à jour tout les champs de la table avec la même valeur! Mais ce n'est pas comme je veux.
Oui je veux que tout les champs de la table soient mise a jour mais pas avec la même valeur!
Il faudrait que pour chaque personne, il mette a jour avec la valeur de la parsonne en question. Alors que pour l'instant, dans ma base, il met à jour toutes les personnes avec la valeur de la première!
Halala... j'espère que tu saura quoi faire....
Peut tu me dire ce que tu veux quand tu me demande les structures de mes deux tables!???
Merci beaucoup!
Marsh Posté le 17-04-2003 à 16:33:43
zut je t'avais oublié
et bien pour les structures si tu peux
m'envoyer ce genre de renseignements ...
bon 2,3 lignes pour les enr.
par ex
Matable1 (clé id_a)
id_a champb
1 jeu
2 serviette
Matable2 (clé id_a + id_b)
id_a id_b champx
1 10 libelle 111
1 11 libelle_111
Au fait tu as bien des clés primaires définis sur tes tables ?
Marsh Posté le 22-04-2003 à 07:43:47
up!
Marsh Posté le 22-04-2003 à 08:57:35
Salut....passé un bon week?
Alors je vais te mettre ces tables:
T_Personnes (clé #NoPersonne)
#NoPersonne NomPersonne NbJoursCode84
2 Bähler 6
5 Brossin 6
26 Jobbin 6
Au départ, toutes les peronnes de la tables ont six comme valeur dans le champ NbJoursCode84.
Quand qqun prends des vacances, une requête la calcule: R_TotalCode84. Jusque là tout foncitonne.
Ensuite, la requête R_Test additionne le champ NbJoursCode84 de la table T_Personne avec le résultat de la requête R_TotalCode84. Ce qui donne le champ Test.
Ensuite, j'essaye de mettre à jour le champ NbJoursCode84 avec le champ Test.
Comme ca ne fonctionnais pas en le faisant directement, j'ai affiché dans un formulaire le champ Test ainsi que le champ NomPersonne. Mon formulaire ressemble à ceci:
NomPersonne Test
Bähler 7
Brossin 6
Jobbin 6
Mais en faisant la requête mise a jour Requête2 ca met a jour tout les champs avec la même valeur comme tu lwe sais.
Heu....pour chaque tables j'ai une clé primaire oui.
Dis moi si tu as besoin d'autre chose...
Je n'y arrive vraiment pas.
Merci beaucoup!
Marsh Posté le 22-04-2003 à 10:26:45
Alors...a force de réfléchire j'ai bien fini par réussire.
Mais bon c'est un peu compliqué!
J'ai créer une requête création de table qui créait une table bien sûr avec le champ test a l'intérieur. (je sais pas pourquoi mais il m'a pas fait chier...)
Ensuite, je fais une mise a jour de table à table. Et voilà....
Bon il doit y avoir plus simple je pense mais bon...ca fonctionne c'est l'essentiel.
Marsh Posté le 22-04-2003 à 13:23:04
Salut le WE a été très bon
Tant mieux si t'es arrivé à une soluce mais ...
Normalement t'aurais pas du avoir besoin de passer par
un formulaire et l'update suivant
devrait fonctionner ...
UPDATE R_Test, T_Personne SET T_Personne.NbJoursCode84 = R_totalcode84.champcontenantlesjoursvacances
where T_Personne.clé = R_totalcode84.clé;
bon t'as pas donné le contenu de ta requête R_totalcode84
et je suppose que dans cette requête tu as un et un seul
enr. pour chaque personne, le champ clé est nécessaire pour
établir la relation entre T_Personne et R_totalcode84 ...
sinon ça donnerait nimp !
Marsh Posté le 22-04-2003 à 16:20:03
Bon j'ai fais ce que tu m'a dit mais ca fonctionne pas, ca me met un message d'erreur.
Mais bon j'ai fais du copier-coler...
Pour ma requête R_TotalCode84:
NomPersonne SommeJoursCode84
Bähler 1
Brossin 0
Cherpillod 2
Effectivement il y a plusieurs valeur suivant la personne!
Mais si tu as une facons plus simple de faire cette mise a jour je veux bien....
En tout cas c'est très gentil de m'aider.
Marsh Posté le 22-04-2003 à 16:51:55
Il faudrait rajouter dans ta requête r_totalcode84,
le champ clé pour avoir =>
clé NomPersonne SommeJoursCode84
2 Bähler 1
5 Brossin 0
99 Cherpillod 2
et tester soit
(Je me suis trompé c pas r_test !!! qu'il fallait mettre
dans ma requête précédente mais r_totalcode84 !!!)
UPDATE r_totalcode84 , T_Personne
SET T_Personne.NbJoursCode84 = R_totalcode84.SommeJoursCode84
where T_Personne.clé = R_totalcode84.clé;
soit
UPDATE T_Personne SET T_Personne.NbJoursCode84 =
(select R_totalcode84.SommeJoursCode84 from r_totalcode84
where T_Personne.clé = R_totalcode84.clé);
Marsh Posté le 23-04-2003 à 08:12:06
Alors...
Comme tu me l'as demandé j'ai rajouter la clé dans ma requête R_TotalCode84 de façons à avoir ce que tu m'a écrit!^.^
J'ai copié collé ce que tu m'as écrit et il me met toujours un message d'erreur:
"LE champ spécifié "T_Personne.clé" peut désigner plusieurs tables listées dans la clause FROM de votre instreuction SQL".
Au fait, dans ce que tu m'a donné, c'est bien "clé" qu'il faut mettre ou il faut mettre le nom de la clé primaire???
Non parceque si je met le nom de la clé primaire (#NoPersonne) a la place de "clé" il me met une erreur de syntaxe.
Si je met le nom de la clé entre crochet pour éviter l'erreur de syntaxe, il me demande la valeur de SommeJoursCode84. Puis ensuite il me dis que l'opération doit utiliser une requête qui peut être mis a jour.
Halala....
Merci beaucoup!
Marsh Posté le 23-04-2003 à 09:40:13
Ok, reprenons ...
Requête R_TotalCode84
=> d'accord on laisse tomber le champ clé
on met à la place NoPersonne (primarykey)
NoPersonne NomPersonne SommeJoursCode84
2 Bähler 1
5 Brossin 0
99 Cherpillod 2
T_Personne (clé NoPersonne)
NoPersonne NomPersonne NbJoursCode84
2 Bähler 6
5 Brossin 6
26 Jobbin 6
Remarque si t'as un #NoPersonne comme nom de ton champ,
tu remplaceras NoPersonne par #NoPersonne
aussi dans les requêtes suivantes ...
Soit (à tester)
UPDATE r_totalcode84 R , T_Personne T
SET T.NbJoursCode84 = R.SommeJoursCode84
where T.NoPersonne = R.NoPersonne;
ou (à tester)
UPDATE T_Personne T
SET T.NbJoursCode84 =
(select R.SommeJoursCode84 from r_totalcode84 R
where T.NoPersonne = R.NoPersonne);
Si tu as de nouveau le message suivant
"LE champ spécifié "T_Personne.clé" peut désigner plusieurs tables listées dans la clause FROM de votre instreuction SQL".
Tu vas dans ta requête r_totalcode84
et tu rajoutes des alias
Note : pour T_personne tu prends pas T comme alias
vu que cet alias est utilisé dans les 2 requêtes précédentes ...
ex : select TX.NoPersonne ... from T_Personne TX
Bonne chance !
Marsh Posté le 23-04-2003 à 10:17:04
la récapitulation est bonne!^.^
Bon j'ai essayer ce que tu as écrit! Il me fait plus d'erreur de type:"Le champ spécifié "T_Personne.clé" peut désigner plusieurs tables listées dans la clause FROM de votre instreuction SQL".
Mais il me demande d'entrer la valeur de R_SommeJoursCode84.
Pour les alias je ne sais même pas ce que c'est!
Mais bon...j'ai trouvé une soluce et ca fonctionne alors je sais pas...ca devient un peu compliqué là non!??
Encore merci!
Marsh Posté le 23-04-2003 à 10:34:11
gab229 a écrit : la récapitulation est bonne!^.^ |
Marsh Posté le 15-04-2003 à 09:45:23
Bonjour a tous!
J'aurais un petit problème.
J'aimerais, depuis une requête selection, effectuer une requête mise a jour sur un champ d'une table!
Donc, j'ai une table avec un champ. J'ai créer une requête selection avec un champ calculé. Et maintenant j'aimerais créer une requête mise à jours pour mettre le champs de ma requête selection dans le champ de ma table.
Malheureusement, Access me dit: "L'opération doit utiliser une requête qui peut être mise à jour.". Je ne comprends pas du tout ce message d'erreur.
Vous pouvez m'aider???
Merci...