Ajde da idemo sa dve tabele, tblPrihodi i tblRashodi. Imaju ista polja:
tblPrihodi (RecordUID=PK, Datum, Hram, Mesto, VrstaPrihoda, Opis, Iznos)
tblRashodi (RecordUID=PK, Datum, Hram, Mesto, Vrsta, Opis, Iznos)
Postoje jos i tabele
tblHramovi (Hram=PK, Opis,itd,itd)
tblVrstaPrihoda = (VrstaPrihoda, Opis)
tblVrstaRashoda = (VrstaRashod,Opis)
Ja cu dalje da pricam o tblPrihodi. Za rashode, sve je isto.
Relacije:
tblVrstaPrihoda :tblPrihodi = 1: vise, tblVrstaPrihodaVrstaPrihoda=tblPrihodi.VrstaPrihoda
tblHram : tblPrihodi = 1:vise, tblHramovi.Hram=tblPrihodi.Hram
Slicno za tblRashodi. Sve relaciej su sa Enforce Referential Integrity = TRUE, Cascade = FALSE, Delete = FALSE . Ovo UVEK TREBA OVAKO, za bilo sta. Ako je Cascade Delete=TRUE, onda ako u tabeli tblHramovi obrises rekord za neki hram to ce automatski obrisati sve rekorde za taj hram u tabeli tblPrihodi. Ako je Cascade Delete=FALSE, iz tabele tblHarmovi NE MOZES da obrises rekord, ako za taj hram postoje rekordi u tabeli tblPrihodi. Za Update je isto - ne mozes da promenis polje Hram u tabeli tblHramovi ako za taj rekord postoje rekordi u tabeli tblPrihodi.
Trebaju ti forme frmHramovi i frmVrstaPrihoda, frmVrstaRashoda - najprostije, da odrzavas ove podatke kad pritreba.
Treba ti i forma za unos u tblPrihodi, to imas, i pretpostavljam da je to OK. ne znam da li je u obliku forme, continiupus form ili datasheet. Zavisno od toga, mogu se ponuditi razlicita resenja za tvoje kasnije zahteve.
Da bi prikazao sve prihode u odredjenm opsegu (Od - Do datuma), obicno se koristi report, ali moze i forma. Lakse je kad imas report. Recimo da je u pitanju prost report, jedan red u reportu za svaki rekord u tabeli tblPrihodi. Report treba da se bazira na tblPrihodi. Nist kveri, nista parametri. Da bi otvorio report za odredjen opseg, treba ti jos jedna forma frmReport_Prihodi_Range. Na formi frmReport_Prihodi_Range je unbound - nema svoj data source. Na njoj imas dva text boxa, txtOdDatuma i txtDoDatuma. U njih unosis datume za koje zelis da vidis prihode. Na formi frmReport_Prihodi_Range imas i dugme cmdPrevievRepot, sa kodom na OnClick:
Code:
Private Sub cmdPrevievReport_Click()
On Error GoTo Err_cmdPrevievReport_Click
Dim strDocName As String
Dim strWhereCondition As String
strWhereCondition = "Datum Between " & SQLDate(Me!txtOdDatuma) & " AND " & SQLDate(Me!txtDoDatume)
strDocName = "repMailingList" '<---- ime tvog reporta
DoCmd.OpenReport reportname:=strDocName, View:=acViewPreview, WhereCondition:=strWhereCondition
Exit_cmdPrevievReport_Click:
Exit Sub
Err_cmdPrevievReport_Click:
MsgBox Err.Description
Resume Exit_cmdPrevievReport_Click
End Sub
Znaci, kad kliknes na report direktno, dobijes report za SVE sto imas u tabeli tblPrihodi. Za filtriranje samo nekih rekorda, koristis pomocnu formu. Ceo potupak bi bio ovakav:
1) sa tvoje glavne forme (neki Switchboard, ili forma za unos), dugmetom pozivas formu frmReport_Prihodi_Range
2) na formi frmReport_Prihodi_Range uneses podatke za kriterijum
3) sa forme frmReport_Prihodi_Range pozoves report i reprt se otvara samo za podatke koji zadovoljavaju zadati kriterijum.
Isto se radi kad umesto reporta imas formu. Samo se DoCmd razlkuje malkice - DoCmd.OpenForm umesto DoCmd.OpenReport.
Sad onaj drugi problem:
Citat:
Sada imam drugu muku, a slicna je kao i ova prethodna:
Treba da u jednoj formi prikazem sumirane iznose po vrsti prihoda, odnosno rashoda za odredjeni period, znaci opet "od" i "do".
Moglo bi ovako. Baziras report na parameter kveriju. Kao parameter stavis nazive polja sa pomocne forme frmReport_byHram:
Code:
SELECT DISTINCT Prihodi.[Vrsta prihoda], Sum(Prihodi.Iznos) AS SumOfIznos, Prihodi.Hram, Prihodi.Mesto
FROM Prihodi
WHERE (((Prihodi.Datum) Between [frmReport_byHram!txtOdDatuma] And [[frmReport_byHram!txtDoDatuma]))
GROUP BY Prihodi.[Vrsta prihoda], Prihodi.Hram, Prihodi.Mesto;
Prica je slicna:
1) Napravis report baziran na datom parameter kveriju. Ako otvoris report direkktno, pitace te za parametre - unses i sve je OK. Samo se parametri cudno zovu, ali boze moj, bar je jednostavno.
2) Sa glavne forme (switchboard ili forma za unos), dugmetom pozoves pomocnu formu frmReport_byHram.
3) Sa forme frmReport_byHram dugmetom otvoris report. Posto su imena parametara identicna imenima kontrola na formi, Access te nece pitati nista, samo ce pokupiti vrednosti sa forme. Moze da ti zatreba formatiranje datuma, a mozda i ne, probaj. Ako treba, upotebi SqlDate funkciju ili Format() ili sta ti se vec dopadne.
Za ovaj poslednji problem ima i druigh resenja ali mislim da je ovo najjednostavnije za pocetak. Ko je vstiji u programiranju, pokusao bi da promeni SQL izkaz za Query Definition, da izbegne parametre. Uglavnom, rezultat bi bio isti.
Nadam se da je ovo pomoglo bar malo.
Bice sigurno jos pitanja i stavri koje ce trebati, a sada ih ili nevidimo ili smo ih zaboravili, ali bar imamo dobru osnovu koju je moguce relativno lako nadgradjivati.
Srecan rad
:-)