• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Verwerkingstijd query

Status
Niet open voor verdere reacties.

flbos

Gebruiker
Lid geworden
5 feb 2004
Berichten
267
In Excel 2000 maak ik gebruik van query's voor het importeren van gegevens uit een access database. Tot nu toe ging dit altijd prima. Voor een bepaalde gegevensselectie is het nu echter noodzakelijk om gebruik te maken van een query met subquery's. Als ik deze uitvoer dan is de verwerkingstijd erg lang (duurt enkele minuten). Dat het uitvoeren van een query enkele minuten duurt is op zich natuurlijk niet vreemd, hoe ingewikkelder de query hoe langer het nu eenmaal duurt.

Wat wel vreemd is dat het uitvoeren van EXACT dezelfde query in Access (ook 2000) slechts 3 tot 4 seconden duurt, oftewel binnen Excel gaat precies dezelfde query 60 keer langzamer. Met andere query's heb ik een dergelijk verschil in verwerkingstijd nooit gemerkt (hooguit een paar tellen). Hoe komt dit? En vooral: is er iets aan te doen?
 
Definieer de query met de subqueries als aparte query in Access en roep deze aan vanuit excel.
Wat er nu gebeurt is dat de subqueries stuk voor stuk naar access gaan en dat excel uiteindelijk zelf het resultaat gaat maken.
Als je de totale query als query in access definieert zoekt access het allemaal zelf uit en access is beter in het afhandelen van queries als excel.
 
Hoi Bartuls,

bedankt voor je antwoord, ik heb de query q1 genoemd in access, vervolgens doe ik in VBA:

SELECT * FROM q1

De verwerkingstijd blijft echter hetzelfde. Moet ik de query soms op een andere manier aanroepen? Het is wel de bedoeling dat het vanuit VBA gebeurd, aangezien er nog meer instrusties uitgevoerd moeten worden als er op de knop gedrukt wordt die de query uit laat voeren.
 
Query

Jazeker kan dat. Zoals je ziet zijn het heel wat subquery's, toch heeft Access het er helemaal niet moeilijk mee als ik hem daarbinnen uitvoer.

SELECT *
FROM tijdgompmnd
WHERE tijdartinr

IN(SELECT tijdartinr FROM tijdgompmnd WHERE tijdjartal = 1998 GROUP BY tijdartinr, tijdjartal HAVING (SUM(tijdomzet)>120))

AND tijdartinr IN(SELECT tijdartinr FROM tijdgompmnd WHERE tijdjartal = 1999 GROUP BY tijdartinr, tijdjartal HAVING (SUM(tijdomzet)>120))

AND tijdartinr IN(SELECT tijdartinr FROM tijdgompmnd WHERE tijdjartal = 2000 GROUP BY tijdartinr, tijdjartal HAVING (SUM(tijdomzet)>120))

AND tijdartinr IN(SELECT tijdartinr FROM tijdgompmnd WHERE tijdjartal = 2001 GROUP BY tijdartinr, tijdjartal HAVING (SUM(tijdomzet)>120))

AND tijdartinr IN(SELECT tijdartinr FROM tijdgompmnd WHERE tijdjartal = 2002 GROUP BY tijdartinr, tijdjartal HAVING (SUM(tijdomzet)>120))

AND tijdartinr IN(SELECT tijdartinr FROM tijdgompmnd WHERE tijdjartal = 2003 GROUP BY tijdartinr, tijdjartal HAVING (SUM(tijdomzet)>120));
 
Probeer het eens zo:

SELECT veld1, veld2, veld3, SUM(tijdomzet)
FROM tijdgompmnd
GROUP BY veld1, veld2, veld3
Having tijdjartal BETWEEN 1998 AND 2003
AND SUM(tijdomzet)>120
 
Dat is weliswaar een eenvoudigere query, maar dwingt helaas niet af dat voor elk jaar geldt dat de omzet hoger dan 120 is. Hiermee worden ook artikelen in het resultaat opgenomen die in een bepaald jaar minder dan 120 keer verkocht worden en dat is niet de bedoeling.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan