[Access] Probleem met update query

Pagina: 1
Acties:

  • Maasluip
  • Registratie: April 2002
  • Laatst online: 21-05 16:34

Maasluip

Kabbelend watertje

Topicstarter
Ik heb een probleempje met een update query in Access. Kort gezegd krijg ik Access niet zo ver dat hij fatsoenlijke data wil geven als ik een update query maak, maar wel als ik een select query maak.

Ik heb twee tabellen, T_Activite en 001 All Engineers. Beiden zitten aanelkaar geknoopt met de velden Code_Tsc_Activite, Nom_Prenom_Activite en Num_Equipt_Activite (= Num_Equipt_Opale in 001 All Engineers). In 001 All Engineers is een veld BCR_CntUmPhone dat ik wil updaten met het aantal records dat in T_Activite.Type_Activite voorkomt waarbij Type_Activite = "P" , en dan gegroepeerd op de drie velden die ik noemde.

Select query is niet zo lastig:
SELECT Count(T_Activite.Numéro_Activite) AS BCR_CntUmPhone,
       T_Activite.Type_Activite,
       [001 All Engineers].Code_Tsc_Activite, 
       [001 All Engineers].Nom_Prenom_Activite,
       [001 All Engineers].Num_Equipt_Opale
FROM T_Activite INNER JOIN [001 All Engineers] ON (T_Activite.Num_Equipt_Activite = [001 All Engineers].Num_Equipt_Opale) 
                                              AND (T_Activite.Code_Tsc_Activite   = [001 All Engineers].Code_Tsc_Activite)
                                              AND (T_Activite.Nom_Prenom_Activite = [001 All Engineers].Nom_Prenom_Activite)
GROUP BY T_Activite.Type_Activite,
         [001 All Engineers].Code_Tsc_Activite, 
         [001 All Engineers].Nom_Prenom_Activite,
         [001 All Engineers].Num_Equipt_Opale
HAVING (((T_Activite.Type_Activite)="P"));

Dit geeft in BCR_CntUmPhone precies de waarde die ik in de tabel 001 All Engineers wil updaten op BCR_CntUmPhone. Maar als ik van deze Query een update query maak dan krijg ik alleen maar de waarde 0 terug.
Ik kom met de update query tot
UPDATE [001 All Engineers] INNER JOIN T_Activite ON ([001 All Engineers].Num_Equipt_Opale    = T_Activite.Num_Equipt_Activite)
                                                AND ([001 All Engineers].Code_Tsc_Activite   = T_Activite.Code_Tsc_Activite)
                                                AND ([001 All Engineers].Nom_Prenom_Activite = T_Activite.Nom_Prenom_Activite)
SET [001 All Engineers].BCR_CntUmPhone = Count([T_activite].[Numéro_Activite])
WHERE (((T_Activite.Type_Activite)="P"));

Wat doe ik hier fout? Hoe moet ik dit dan wel opzetten?

Signatures zijn voor boomers.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Wacht even: werkt je update query niet of verwacht je dat je een bijgewerkte recordset terugkrijgt (zoals je dat met select wel krijgt ;))?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 21-05 16:34

Maasluip

Kabbelend watertje

Topicstarter
BtM909 schreef op 17 juni 2004 @ 10:24:
Wacht even: werkt je update query niet of verwacht je dat je een bijgewerkte recordset terugkrijgt (zoals je dat met select wel krijgt ;))?
Ik wil dat mijn tabel 001 All Engineers bijgewerkt wordt ja. Als ik Access goed begrijp dan krijg je op zijn minst een preview van de data te zien als je de Datasheet View bekijkt. Daar zijn alle waardes 0.

Ik heb de update query trouwens even uitgevoerd, dan krijg ik de foutmelding "You tried to execute a query that does not include the specified expression 'BCR_CntUmPhone' as part of an aggregate function.'
Maar zo ver ik kan zien kun je geen group by aangeven als je een update query hebt :?

Signatures zijn voor boomers.


  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Ik heb de update query trouwens even uitgevoerd, dan krijg ik de foutmelding "You tried to execute a query that does not include the specified expression 'BCR_CntUmPhone' as part of an aggregate function.'
Maar zo ver ik kan zien kun je geen group by aangeven als je een update query hebt
That's correct! En omdat jij een count gebruikt in je query, probeer je dus wel te groupen. Tenminste, als je wil counten moet je group by gebruiken, wat in die update query dus weer niet kan.

Tip: specificeer je updatequery zonder de afhankelijkheid van de Count (eentje die ewrkt dus ;)), en gebruik SUB-queries om het probleem op te lossen.

[ Voor 3% gewijzigd door OZ-Gump op 17-06-2004 10:52 ]

My personal website


  • Maasluip
  • Registratie: April 2002
  • Laatst online: 21-05 16:34

Maasluip

Kabbelend watertje

Topicstarter
OZ-Gump schreef op 17 juni 2004 @ 10:50:
[...]

gebruik SUB-queries om het probleem op te lossen.
Hmm, afgezien van een rant waarom je in Access toch altijd subqueries moet gebruiken als het ook maar een beetje lastiger dan select * wordt... krijg ik het zo nog niet aan het werk.

Ik gebruik mijn eerdere select query als subquery en dacht dan aan de hand van die query de tabel 001 All Engineers te updaten.
De query die ik dan heb is
UPDATE [001 All Engineers] INNER JOIN [00010 Select CntUMPhones]
  ON ([001 All Engineers].Num_Equipt_Opale    = [00010 Select CntUMPhones].Num_Equipt_Opale)
  AND ([001 All Engineers].Nom_Prenom_Activite = [00010 Select CntUMPhones].Nom_Prenom_Activite)
  AND ([001 All Engineers].Code_Tsc_Activite   = [00010 Select CntUMPhones].Code_Tsc_Activite)
SET [001 All Engineers].BCR_CntUmPhone = [00010 Select CntUmPhones].[BCR_CntUmPhone];

De foutmelding die ik dan krijg is 'Operation must use an updatable query'.
De grap is dat de help daar dit over zegt:
This error occurs when the current query's Update To row includes a field from either a crosstab query or select query in which an aggregate (total) was calculated for the field (using either the Totals row or a domain function in the Field row). To update a field using the aggregate of another field, calculate the aggregate in the update query itself, not a different query.
Ofwel: ik mag de aggregate volgens de help juist niet in de subquery doen maar ik moet hem in de update query doen. 8)7

Met excuses voor het vern*ken van de layout O-)

[edit]
Goed, het werkt met nog een extra omweg wel: eerst een tussentabel maken van waaruit ik de update doe. Het kan toch niet zijn dat dit zo omslachtig moet?

[ Voor 11% gewijzigd door Maasluip op 17-06-2004 11:30 . Reden: Te hard vern*kte layout ]

Signatures zijn voor boomers.