Toevoegquery met een berekend criterium

Status
Niet open voor verdere reacties.

Lontmanen

Gebruiker
Lid geworden
4 nov 2010
Berichten
8
Hallo allemaal.

Ik heb een toevoegquery met niet alleen harde waarden als criteria, zoals tussen dat en dat crediteurnummer of vanaf die datum, maar daarbij ook een criterium met een berekende waarde die ik moet halen uit een andere tabel.

Ik wil dus een toevoegquery draaien vanaf inkooporders + 1, waarbij het inkoopfactuurnummer >= (het grootste inkoopfactuurnummer + 1), waar ik het grootste inkoopfactuurnummer moet halen uit een andere tabel:

Kan dit met een toevoegquery?

Moet dit misschien zoiets zijn?:

INSERT INTO inkoop_2010 (inkoopfactuurnummer, etc)
SELECT AlleInkopen.inkoopfactuurnummer, etc
FROM AlleInkopen
WHERE (AlleInkopen.Inkoopfactuurnummer)>=Max (OverzichtOrders.Inkoopfactuurnummer)+1
FROM OverzichtOrders

Met de functie:
SELECT Max (OverzichtOrders.Inkoopfactuurnummer) +1
FROM OverzichtOrders;

Krijg ik op zich wel het opvolgende inkoopfactuurnummer.
Vanaf dat inkoopfactuurnummer wil ik dus de tabel inkoop_2010 bijwerken.
Gaat dit met een toevoegquery?

Alvast bedankt.
 
Het zou zo ongeveer moeten:

Code:
WHERE (Inkoopfactuurnummer)>=In(SELECT Max (Inkoopfactuurnummer) FROM OverzichtOrders)

Waarbij het deel vanaf >= dus in het criteriumveld komt te staan van Inkoopfactuurnummer.
 
Bedankt voor de snelle reactie.
Maar schrijf je consistancy niet zo: consistency...
 
You're the expert....
 
De In functie wordt toch gebruikt om te kijken of de uitkomst voorkomt in een lijst.
Maar als de tabel heel groot is (met honderduizenden regels), en je met de query per regel gaat kijken of factuurnummer > max(factuurnummer) gaat het draaien wel heel lang duren.

Zit de oplossing in dat geval misschien in het maken van een module?
Hoe zou zoiets er ongeveer uit moeten zien?
 
Ik heb de query niet uitgetest, maar de bedoeling was niet om het woord In te laten staan. :o
De bedoeling is dat je met een subquery de max waarde opzoekt, en die waarde als criterium gebruikt. Daarbij wordt dus niet door alle regels gelopen. Je kunt in een Totalenqeury die subselectie nog maken met een WAAR regel.
 
Beste OctaFish,

Zou je dat met die subquery kunnen uitwerken voor mij?
Ik heb een klein voorbeeldbestand bijgevoegd.
Ik heb een tabel met alle orders, bestaande uit kolommen met OrderNo en FactuurNo.
Ik heb een tabel met alle facturen, bestaande uit kolommen met FactuurNo, KlantNo en Factuurdatum.
En ik heb een tabel met alle klanten, bestaande uit kolommen met KlantNo, Klantnaam en Woonplaats.
OrderNo, FactuurNo en KlantNo zijn de primary keys, en de tabellen zij gekoppeld via FactuurNo en KlantNo.

Nu heb ik ook een tabel met alleen de Orders_2010, bestaande uit kolommen met OrderNo, KlantNo, Klantnaam en Factuurdatum.

Deze wil ik vullen dmv een toevoegquery. Ik heb de 4 kolommen geselecteerd van waaruit Access de informatie moet halen.
En bij factuurdatum heb ik als criterium opgegeven Like **-**-2010, zodat het programma alleen de facturen van 2010 pakt.
Maar nu wil nog een criterium opgeven dat het programma in de tabel Orders_2010 moet kijken wat het hoogste FactuurNo is, en vervolgens vanaf FactuurNo + 1, de relevante rijen gaat toevoegen vanuit de andere tabellen.

Ik krijg dit wel voor elkaar door de tabel Orders_2010 eerst helemaal te legen met een verwijderquery (QryOrders_2010Legen), en hem vervolgens weer helemaal te vullen met alle relevante orders (QryOrders_2010Vullen) met alleen de datum als criterium.

Maar dit lijkt me geen geschikte oplossing in geval er honderdduizenden rijen zijn.
Hoe kan ik er voor zorgen dat het programma eerst kijkt bij wel FactuurNo ik gebleven ben, en het programma dan alleen gaat bijwerken/toevoegen vanaf het volgende factuurnummer?

Het bepalen van het hoogste FactuurNo in een tabel kan ik wel, met behulp van de Max-functie.
In de toevoegquery wilde ik dit doen met een Max-functie als criterium (iets van > Max(Orders_2010.FactuurNo)), maar dan krijg ik de error: "U kunt geen statistische functie gebruiken in een WHERE-component" (zie QryOrders_2010VullenVanaf).

Hoe los ik dit probleem op?

Alvast bedankt,

MVG Pieter Lont
 

Bijlagen

Dat wordt dan vanavond, omdat ik vandaag weinig tijd heb om in de vragen te steken.
 
Soms zit het mee...

Code:
INSERT INTO Orders_2010 ( OrderNo, FactuurNo, Klantnaam, Factuurdatum )
SELECT Orders.OrderNo, Facturen.FactuurNo, Klanten.Klantnaam, Facturen.Factuurdatum
FROM Klanten INNER JOIN (Facturen INNER JOIN Orders ON Facturen.FactuurNo = Orders.FactuurNo) ON Klanten.KlantNo = Facturen.KlantNo
WHERE (((Facturen.FactuurNo)>nz(DMax("[FactuurNo]","[Orders_2010]"))) AND ((Year([factuurdatum]))=Year(Date())));

Deze doet het prima in de testversie.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan