Berekeningen in query stoppen na record 354

Status
Niet open voor verdere reacties.

bvrenselaar

Gebruiker
Lid geworden
2 dec 2009
Berichten
11
Goedemorgen,

ik ben bezig met het opzetten van een database, waarin ik verschillende berekeningen maak in verschillende query's.

In alle query's die ik tot nu toe gemaakt heb, worden de berekeningen keurig uitgevoerd zoals ik wil, maar vanaf record 354 niet meer. Vanaf record 354 wordt in iedere query nog slechts in 1 van de 5 velden de berekening uitgevoerd. De veldeigenschappen zijn overal identiek, ik kan nergens een afwijking vinden.

Heeft iemand enig idee wat dit kan zijn, of wellicht zelf dit probleem al eens meegemaakt?

Met vriendelijke groet,

Bert
 
Laatst bewerkt:
Wat bedoel je met Veld 354? Volgens mij kun je in een tabel maar maximaal 255 velden aanmaken, en ook in een query.
 
Dat vermoedde ik al ;)
Wat gebeurt er als je dat record uitsluit van de query? Vermoedelijk kun je wel een criterium maken op basis van ID-veld?
 
Uitsluiten van dit record verandert verder niets. Record 353 blijft de laatste record waarin de berekening gemaakt wordt...
 
Kun de de SQL code hier posten? (<Beeld>, <SQL>)
 
SELECT Gebouwen.Nr, Gebouwen.[m2 VVO], [Elektriciteit (kWh)]+[Zelf opgewekt (kWh)]-[Teruggeleverd (kWh)] AS [kWh Totaal], [kWh Totaal]/[m2 VVO] AS [kWh per m2], [Elektriciteit]+[Groene stroom]+[Teruggeleverd] AS [CO2 Totaal], [CO2 Totaal]/[m2 VVO]*1000 AS [CO2 per m2], [Elektriciteit (kWh)]*0.00057 AS Elektriciteit, [Groene stroom (kWh)]*(-0.00057) AS [Groene stroom], [Teruggeleverd (kWh)]*(-0.00057) AS Teruggeleverd
FROM Gebouwen INNER JOIN Verbruiken2008NL ON Gebouwen.Nr = Verbruiken2008NL.Nr
GROUP BY Gebouwen.Nr, Gebouwen.[m2 VVO], [Elektriciteit (kWh)]+[Zelf opgewekt (kWh)]-[Teruggeleverd (kWh)], [kWh Totaal]/[m2 VVO], [Elektriciteit]+[Groene stroom]+[Teruggeleverd], [CO2 Totaal]/[m2 VVO]*1000, [Elektriciteit (kWh)]*0.00057, [Groene stroom (kWh)]*(-0.00057), [Teruggeleverd (kWh)]*(-0.00057)
ORDER BY Gebouwen.Nr;
 
Probeer deze variant eens:

SELECT Gebouwen.Nr, Gebouwen.[m2 VVO], [Elektriciteit (kWh)]+[Zelf opgewekt (kWh)]-[Teruggeleverd (kWh)] AS [kWh Totaal], [kWh Totaal]/[m2 VVO] AS [kWh per m2], [Elektriciteit]+[Groene stroom]+[Teruggeleverd] AS [CO2 Totaal], [CO2 Totaal]/[m2 VVO]*1000 AS [CO2 per m2], [Elektriciteit (kWh)]*0.00057 AS Elektriciteit, [Groene stroom (kWh)]*(-0.00057) AS [Groene stroom], [Teruggeleverd (kWh)]*(-0.00057) AS Teruggeleverd
FROM Gebouwen INNER JOIN Verbruiken2008NL ON Gebouwen.Nr = Verbruiken2008NL.Nr
GROUP BY Gebouwen.Nr, Gebouwen.[m2 VVO]
ORDER BY Gebouwen.Nr
 
Hierbij krijg ik steeds de foutmelding dat de opgegeven expressie geen deel uitmaakt van een statistische functie. Wanneer ik bij enkele velden het totaal verander van 'expressie' naar 'group by', krijg ik wel weer de gegevensbladweergave te zien, maar zonder veranderingen helaas.

Alleen bij de velden kWh per m2 en beide CO2 berekeningen kan ik de 'expressie' laten staan.
 
Feitelijk zou je alle berekeningen als expressie moeten kunnen gebruiken; eventueel nog met extra haakjes er omheen. Maar zelfs met de velden [kWh Totaal] en [CO2 Totaal] op group by geen verschil?
Probeer die twee anders eens met de optie Eerste..
 
Berekeningen als expressie gebruiken lukt bij deze velden niet, ook niet met extra haakjes er omheen.

Wanneer ik de optie 'eerste' gebruik, vraagt hij me voor ieder veld een parameter op te geven. Maar wat ik ook doe, berekeningen worden er niet gemaakt in de hoge records.
 
De parameter komt dan doordat je waarschijnlijk de Expressie niet meer gebruikt bij de berekeningen. Die moet je dus laten staan. De overige velden, waar je anders Group By voor zou gebruiken, kun je op Eerste zetten. Dat zou het berekenen sneller moeten maken, omdat Access niet meer eerst alle velden hoeft te groeperen. Daarvoor is het veld Gebouw nr. namelijk al genoeg.
 
Op dit moment staan alle velden op Group By. Zodra ik ergens expressie toevoeg, krijg ik de volgende foutmelding:

U probeert een query uit te voeren waarbij de opgegeven expressie [Elektriciteit (kWh)]*0,00057 geen deel uitmaakt van een statistische functie.

Het vreemde is dat met alle velden op Group By, in de eerste 353 records gewoon de berekeningen worden uitgevoerd. Daarna plotseling niet meer. In een aantal gelijksoortige query's die ik gemaakt heb stopt de berekening al na record 285.

Ik heb een voorbeeldbestand toegevoegd, waarin de verschillende tabellen en query's staan. In de eerder genoemde query 'Elektra' is te zien dat de velden 3-6 de berekening slechts uitvoeren tot record 353. De velden 7-9 voeren de berekening uit tot de laatste record. Dit probleem geldt voor alle query's, in de query's 'Papier' en 'Vervoer' stoppen de berekeningen al bij record 285.

De query 'totalen' waar het eindresultaat in wordt berekend lijkt helemaal willekeurig een selectie te maken van records en berekeningen. Kan er wellicht iemand op basis van dit voorbeeldbestand de fout uit mijn database halen?
 

Bijlagen

Als je de db als 2003 kan posten, dan kan ik er straks wel naar kijken, anders wordt het vanavond.
 
Ik ben de hele dag op pad, dus dat wordt lastig. Ik zou het geweldig vinden als je er vanavond even naar wilt kijken!
 
Was een leuk probleem, dit.... ik ben benieuwd hoe het heeft kunnen ontstaan. Heb je in de laatste tijd iets veranderd aan de db?
 
Hierbij een voorbeeldje met wat uitwerkingen die wel werken. Ik heb je eigen queries gekopieerd, en er een twee achter gezet, zodat je het origineel kunt vergelijken met de nieuwe variant.

Wat er precies aan de hand is in je db is mij nog steeds niet duidelijk; ik heb hem eerst naar 2003 geconverteerd, want ik heb een %$@^%Y W^$##@T hekel aan 2007, maar het probleem was daar exact hetzelfde. Het lag dus niet aan de Access versie. Toch moet er een onlangs iets zijn veranderd in je database, want het probleem ligt waarschijnlijk in veranderde veldeigenschappen. Misschien heb je de standaardwaarde van de numerieke velden afgehaald?
Enniewee, door deze aanpassing worden de numerieke velden na pakweg rij 354 niet meer als de waarde 0 gezien, maar als de waarde Null. Nou en, zou je denken, Nul of Null, what's in a name? In db-land een heleboel... In je oorspronkelijke query maak je deze berekening:
[Elektriciteit (kWh)]+[Zelf opgewekt (kWh)]
Als deze berekening wordt uitgevoerd op de waarden 354+23, dan is de uitkomst: 377. Heb je de waarden 354+0, dan is de uitkomst: (tromgeroffel...): 354. Is de waarde van [Zelf opgewekt (kWh)] echter Null, dan is de uitkomst van 354+Null=0 (Nul dus)... Access kan niet rekenen met Null-velden! Kortom: om het probleem te omzeilen, moet je Null-waarden in het veld afvangen. Dat doe je als volgt:
Code:
IIf([Zelf opgewekt (kWh)] Is Null,0,[Zelf opgewekt (kWh)])
De berekening wordt dan:
Code:
[Elektriciteit (kWh)]+IIf([Zelf opgewekt (kWh)] Is Null,0,[Zelf opgewekt (kWh)])
En dat moet je dan doen voor alle berekeningen waar de Null-waarde kan voorkomen. Ik heb zoals gezegd een aantal queries gemaakt die aan deze voorwaarden voldoen, en die nu dus totalen weergeven. De SQL van één query luidt nu:

SELECT Gebouwen.Nr, Gebouwen.[m2 VVO], [Elektriciteit (kWh)]+IIf([Zelf opgewekt (kWh)] Is Null,0,[Zelf opgewekt (kWh)])-IIf([Teruggeleverd (kWh)] Is Null,0,[Teruggeleverd (kWh)]) AS [kWh Totaal], [kWh Totaal]/[m2 VVO] AS [kWh per m2], IIf([Elektriciteit (kWh)] Is Null,0,[Elektriciteit (kWh)])*0.00057 AS Elektriciteit, IIf([Groene stroom (kWh)] Is Null,0,[Groene stroom (kWh)])*(-0.00057) AS [Groene stroom], IIf([Teruggeleverd (kWh)] Is Null,0,[Teruggeleverd (kWh)])*(-0.00057) AS Teruggeleverd, [Elektriciteit]+[Groene stroom]+[Teruggeleverd] AS [CO2 Totaal (ton)], [CO2 Totaal (ton)]/[m2 VVO]*1000 AS [CO2 per m2 (kg)]
FROM Gebouwen LEFT JOIN Verbruiken2008NL ON Gebouwen.Nr = Verbruiken2008NL.Nr
WHERE (((IIf([Elektriciteit (kWh)] Is Null,0,[Elektriciteit (kWh)])*0.00057)>0)) OR (((IIf([Groene stroom (kWh)] Is Null,0,[Groene stroom (kWh)])*(-0.00057))>0)) OR (((IIf([Teruggeleverd (kWh)] Is Null,0,[Teruggeleverd (kWh)])*(-0.00057))>0))
ORDER BY Gebouwen.Nr;
Bekijk het voorbeeld, en pas zelf de rest aan... D)
 

Bijlagen

Geweldig, zo is het helemaal opgelost! Bedankt voor alle moeite! Alle berekeningen worden nu tot aan de laatste record uitgevoerd. De standaardwaarden stonden allemaal niet ingevuld en tot record 354 was de waarde 0 overal ingevoerd. Dit had ik helemaal over het hoofd gezien, gelukkig dat het zo eenvoudig te verhelpen is.

Heb je toevallig de query totalen ook bekeken? Deze blijft voor mij een raadsel, ik kan hier geen enkele reden vinden voor het probleem. Er lijkt gewoon een willekeurige selectie gemaakt te zijn...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan