[VBA/Access] som van query met berekende velden in rapport

Pagina: 1
Acties:
  • 605 views sinds 30-01-2008
  • Reageer

  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
In access heb ik 2 tabellen met in de ene klantgegevens (klantnr, naam, ...) en in de andere aankoopgegevens (klantnr, product, ...), met een 1 op veel relatie.

Op deze aankopen moet een kost_per_semester betaald worden. Afhankelijk van het jaar en periode varieert deze kost. Daarom is dit veld niet opgenomen in de tabel. Het bedrag moet wel in een rapport getoond kunnen worden (per aankoop, of som per klant en uiteindelijk totale som van alle aankopen)

Daarom heb ik een query gemaakt met de velden die getoond moeten worden in het rapport en een veld Kost: fBerekenKost([aankoopdatum];[vastekost];......) (aankoopdatum + vastekost zijn velden uit de tabel aankoopgegevens die gebruikt worden om de kost te berekenen)

in een module heb ik deze functie uitgeschreven
code:
1
2
3
 fBerekenKost(aankoopdatum, vastekost) as currency
....
fBerekenKost = .... (te betalen bedrag)


Om de de aankopen individueel per klant te tonen heb ik een rapport gemaakt. Het hoofdrapport is gebaseerd op de tabel klanten (om naam, ... te tonen). In de detail sectie heb ik een subrapport gebaseerd op de query. Gemeenschappelijke velden zijn klantnr. Dit werkt zonder probleem.

Nu probeer ik ook een rapport te maken met de totale kost per klant en de totale kost van alle aankopen.

Hiervoor heb ik een query gemaakt met volgende velden in: klantnr, naam, sum of kost (total veld = sum). Deze query is gebaseerd op de vorige query die verwijst naar fBerekenKost

Als ik nu een rapport maak die gewoon verwijst naar deze query vraagt deze altijd naar de "sum of kost" in een dialoogvenster. De programmacode wordt dus niet uitgevoerd...

Ik heb ook al geprobeerd om eerst een dummy tabel te maken met de kost in, maar dit geeft uiteindelijk hetzelfde resultaat.

Heeft iemand een beter idee om dit te verwezelijken? Ik geef graag meer uitleg of een concreet voorbeeld als het voorgaande wat onduidelijk is.

  • PaulZ
  • Registratie: Augustus 2004
  • Laatst online: 21-05-2024
Als de query vraagt naar de waarde van een veld betekent dit dus dat het veld écht niet gevonden kan worden in de query. Zet toch maar even de code neer (mss van beide queries), da's wat makkelijk praten denk ik.

Vlinders moet je volgen, niet vangen...


  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
query 1: qryKostenBerekening
met een veld: fBerekenKostIncl([aankoopdatum];[kostpersemester];[oudeindex];[nieuweindex]) (= het veld dat berekend wordt)

aankoopdatum, oudeindex, nieuweindex = een veld uit tblAankopen
kostpersemester = een veld uit tblAankopen (niet het veld dat berekend moet worden, maar een vaste kost per semester)

met als achterliggende code:
code:
1
2
3
4
5
Function fBerekenKostIncl(aankoopdatum, kostpersemester, oudeindex, nieuweindex) As Currency
    If FacturatieSemester = 1 And facturatiejaar > Year(aankoopdatum) + 1 Then
        fBerekenKostIncl = (((nieuweindex / oudeindex) * 0.8) + 0.2) * kostpersemester
    End If
end function


FacturatieSemester en Facturatiejaar zijn variabelen die opgevuld worden via tekstvakken op een formulier. Als er op ok wordt gedrukt om het rapport te tonen gaat de inhoud van de tekstvakken gekopieerd worden naar deze variabelen dmv:

Call modBerekendeVelden.IngaveData(txtFacturatiejaar.Value, txtFacturatieperiode.Value) (= code in het formulier achter de knop OK)

de code in de module:
code:
1
2
3
4
Public Sub IngaveData(jaar, periode)
    facturatiejaar = jaar
    FacturatieSemester = periode
End Sub


Deze code werkt. In het rapport met elke aankoop per klant afzonderlijk wordt het juist berekend.

query2: qryKostenBerekeningSomPerKlant (gebaseerd op query qryKostenBerekening)

field: klantnr
table: qryKostenBerekening
total: group by

field: naam
table:qryKostenBerekening
total: group by

field: Sum Of KostIncl
table:qryKostenBerekening
total: sum

Als ik deze query koppel aan een rapport wordt de programmacode niet meer uitgevoerd (wat ik dacht dat deze wel zou doen aangezien dat deze verwijst naar de 1ste query met daar de functie in)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 17:11

Creepy

Tactical Espionage Splatterer

VBA en access? Dat hoort in Officesuites en -software zoals je in Waar hoort mijn topic? had kunnen lezen ;)

Move -> Officesuites en -software

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • mmy841
  • Registratie: Juli 2004
  • Laatst online: 09-07-2021
@Creepy: ok, sorry...

Ik heb ook nog wat zitten testen de afgelopen dagen, maar ik kom steeds hetzelfde probleem tegen. Indien ik een totaal van de kosten per klant wil hebben loopt het fout. Ik heb al geprobeerd om van de 1ste query een tabelmaakquery te maken. In de nieuwe tabel staan dus weer alle gegevens apart (klantnr, kost, ...). Vervolgens een nieuwe query uitvoeren die wel de totalen maakt (group by op de andere velden + sum op kost) en een rapport baseren op deze nieuwe query...

zelfde resultaat echter. Kan iemand mij aub op weg helpen?

edit: OK! Domme fout van mij, in lager gelegen code stond het volgende:
Screen.ActiveReport.RecordSource = "select * from tblKlanten" (of een ander select statement, om te filteren op klantnr, ...)

Eerst werd dus de query (met totalen) als bron gebruikt, maar vervolgens velden uit tblKlanten (die natuurlijk niet de kost bevatten, waardoor er ook geen som gemaakt kon worden!).

[ Voor 25% gewijzigd door mmy841 op 15-05-2007 09:14 ]