UPDATE met subquery 'must use an updateable query'

Status
Niet open voor verdere reacties.

JohnLost

Nieuwe gebruiker
Lid geworden
6 jan 2009
Berichten
2
Wie heeft een idee wat hier mis gaat?

Ik heb een tabel met bedragen in diverse valuta die ik wil omrekenen naar Euro's. De dagkoers staat in een simpele tabel Dagkoers met de velden Datum, Valuta en Koers. Er is niet voor alle tussenliggende dagen een koers beschikbaar, dus voor elke datum moet gezocht worden naar een record met hoogste datum die niet na de gezochte datum ligt.

Wanneer ik dit opvraag met de subquery in de SELECT gaat het prima:
Code:
SELECT Openstaand.Bedrag, Openstaand.Valuta, Openstaand.Datum, [Bedrag]/(SELECT TOP 1 DagKoers.Koers FROM DagKoers WHERE DagKoers.Datum<=Openstaand.Datum AND DagKoers.Valuta=Openstaand.Valuta ORDER BY Dagkoers.Datum DESC) AS EUROS
FROM Openstaand;

Maar als ik het veld BedragEUR wil updaten gaat het mis:
Code:
UPDATE Openstaand SET Openstaand.BedragEUR = [Bedrag]/(SELECT TOP 1 DagKoers.Koers FROM DagKoers WHERE DagKoers.Datum<=Openstaand.Datum AND DagKoers.Valuta=Openstaand.Valuta ORDER BY Dagkoers.Datum DESC);

'Operation must use an updateable query'.

Daarnaast vraag ik me sowieso af wat hiervoor de meest efficiënte methode zou zijn, het gaat om plm. 64000 records dus een beetje performanceverschil kan al snel tijd schelen...

Iemand enig idee wat de oplossing is?

Alvast bedankt!
 
Je zou er een functie voor kunnen maken die je dan aanroept.
 
Beste OctaFish,

Bedankt voor je snelle reactie! In eerste instantie had ik dit inderdaad met een functie opgelost die werd aangeroepen vanuit de UPDATE-query. Aangezien dit nogal traag was ben ik gaan zoeken naar een betere oplossing.
Maar mogelijk kan ik nog winst boeken door de functie te herschrijven. Ik heb nu een functie met parameters datum en valuta waarbij ik een recordset open met voorwaardes valuta=valuta en datum<=datum. Aflopend sorteren TOP 1 values.

Dit werkt ook niet snel, weet je hier een betere oplossing voor?
 
In eerste instantie had ik dit inderdaad met een functie opgelost die werd aangeroepen vanuit de UPDATE-query.
Ik zou de hele procedure met een functie doen. Ik zie eerlijk gezegd weinig winst in het maken van een functie en die vervolgens alsnog in een query te zetten. Dus ik zou met 2 recordsets werken: de ene haalt de dagkoersen op en die gebruik je in de tweede recordset om het veld bij te werken.
Als je er niet uit komt, zou ik zeggen: doe er een voorbeeldje bij, want ik sta niet te popelen om die tabelstructuur na te bouwen :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan