Evo:
Prvo napravi ovakav kveri (napravi ga bas ovako za pocetak, cut/paste odavde u SQL prozor):
Code:
SELECT RedniBrojO, Datum, Kolicina, PunRezervoar, VoziloID
FROM tblOtpremnica
WHERE (((Datum)>=#2/18/2008#) AND ((Datum)<=#3/25/2008#) AND ((VoziloID)="444-M-127"));
i nazovi ga
qryPunjenjeGorivaZaVozilo. To je otprilike jedini kveri koji ces mozda morati da generises u kodu, ako bas zelis. Znas ono:
SET db = currentdb
SET qdef = db.QueryDefs ("qryPunjenjeGorivaZaVozilo")
strSQL = = "SELECT RedniBrojO, Datum, Kolicina, PunRezervoar, VoziloID "
strSQL = strSQL & " FROM tblOtpremnica "
strSQl = strSQL & "WHERE (((Datum)>=#2/18/2008#) AND ((Datum)<=#3/25/2008#) AND ((VoziloID)="444-M-127"));"
Ovaj poslednj strSQL = strSQL & ... naravno da nije ispravan ali verujem da to znas da izvedes i sam.
Onda dodje jedno
qdef.SQL = strSQL i gotovo, kroz kod si napravio query.
Dalje je lako: napravis dva kverija, koji ti racunaj datm prvog DA i poslednjeg DA u kveriju qryPunjenjeGorivaZaVozilo:
qryDatumPoslednjegPunogRezervoara:
Code:
SELECT Max(qryPunjenjeGorivaZaVozilo.Datum) AS MaxOfDatum
FROM qryPunjenjeGorivaZaVozilo
WHERE (((qryPunjenjeGorivaZaVozilo.PunRezervoar)="DA"));
qryDatumPrvogPunogRezervoara:
Code:
SELECT Min(qryPunjenjeGorivaZaVozilo.Datum) AS MinOfDatum
FROM qryPunjenjeGorivaZaVozilo
WHERE (((qryPunjenjeGorivaZaVozilo.PunRezervoar)="DA"));
Ovo su fiksni kveriji, napravis ih jednom i ne diras vise.
Kad imas sve obvo, ond aje sabiranje jednostavno:
qrySumaKolicine:
Code:
SELECT qryPunjenjeGorivaZaVozilo.VoziloID, Sum(qryPunjenjeGorivaZaVozilo.Kolicina) AS SumOfKolicina
FROM qryPunjenjeGorivaZaVozilo, qryDatumPoslednjegPunogRezervoara, qryDatumPrvogPunogRezervoara
WHERE (((qryPunjenjeGorivaZaVozilo.Datum)<=[MaxOfDatum] And (qryPunjenjeGorivaZaVozilo.Datum)>[MinOfDatum]))
GROUP BY qryPunjenjeGorivaZaVozilo.VoziloID;
Taj ti daje rezultat koji trazis. Pretpostavka je da se vozilo ne puni dva oputa u toku jednog dana, ili bar da ne dobija DA dva puta u istom danu. Poslednji kveri jednostavno sabere sve dane osim prvoga (to je bilo kad je bio prvi put rezervoar pun, DA)
Cisto za razumavanje sta se desava, ostavio sam kveri qrySumaKolicine_Kontrola. Taj pokazuje sta se zaista sabira kverijem qrySumaKolicine.
Da sumiramo:
1. sagradi SQL izraz za kveri qryPunjenjeGorivaZaVozilo. Mzoe iz koda, a moze i na druge nacine, pomocu tabele parametara na primer. u tom slucaju nema koda, a kao sto znamo 'the best code is no code at all'.
2. procitaj rezultat kverija qrySumaKolicine. Obican Dlookup("SumOfKolicina","qrySumaKolicine") zavrsava posao.
Zakacio sam tvoju istu bazu sa dodatkom 5 kverija. 4 su radni a peti za ilustraciju.
Dodao sam i tabelu tblVoziloDatumOdDatumDo, koju nisam koristio nigde. To je tabela paramateara za ovaj zadatak. Ako tamo uneses parametre, onda moze kveri qryPunjenjeGorivaZaVozilo da postane fixan, ako mu se doda ova tabela i parametri se citaju odande. I nema qdef, currentdb i ostale kerefeke. Ali, ako volis da programiras, neka, dobro je za umnu gimnastiku.