Istorija promena na zapisima je potezak zadatak i na vecim sistemima nego sto je Access. Ukratko, nam elegantnog resenja z atvoj problem u Accessu. elegantno resenje bi bilo ono gdese uslovi zadaju na nivou tabela, bez pisanja koda. Dakle, kod moras da pises, a to moze na nekoliko nacina, a dacu ti dva. Ako neko ima bolju ideju, slobodno se javite
Ovako, istorija
bilo kakvih promena na zpisu cuva se na jedan nacin, istorija promena na nekom posebnom polju cuva se na drugi nacin.
Nacin prvi, za bilo kakve promene:
Zamisli na trenutak da nisi u Accessu nego u MS SQL. MS SQL moze da detektuje automatski prirodu promene (update/delete) i shodno tome moze na primer ceo rekord (stanej pre promene) da zapise u neku tabelu tblMytable_History, Table tblMyTable_History ima identicnu strukturu kao tblMyTable (cija se istorija zeli cuvati), plus dva polja DatumUpisaUIstoriju i neki AutoNumber, cisto da broji rekorde. E, u Accesu to ne moze nas nivou tabela, ali moze da se izvede na nivou aplikacije. Ovo vredi pod uslovom da niko, ama bas niko, nikada, ali zaista nikada, ne ode direktno u tabele i menja/brise podatke. Primer ovoga imas na jednom Access web sajtu (Google "Allen Browne" ili idi na top temu Korisni linkovi pa na mvp.org i trazi odatle)
Nacin drugi, za promene na nekom posebnom polju:
Uvedes tabelu tblTabliceSasija sa poljima
SasijaID -- broj sasije, kao u tabeli tblVozila
TablicaID -- broj tablice, ako u tabeli tblTablice
OdDatuma -- kad je tablica stavljena na sasiju
Kilometraza -- citanje kilometraze na dan kad je tablica zakacena na vozilo
U ovoj tabeli SasijaID mora da bude Unique, a isto tako i TablicaID mora da bude Unique. Nije dovoljno da kombinacija (TablicaID,SasijaID) bude jedinstvena, jer bi to dozvolilo da se jedna ista tablica nakaci na vise vozila.
Onda uvedes tabelu tblSasijeTablicaIstorija u koju upisujes novi rekord kad god se u tabeli tblTabliceSasija promeni neko od polja SasijaId ili TablicaID. Ovde je potrebno i dovoljno da imas jedinstvenu kombinaciju SasijaID,TablicaID.
Kad ti treba odgovor na pitanje koje si postavio, malo se mucis sa kverijima i dobijes odgovor. Verovatno ces morati da radis neki UNION izmedju dve tabele, pa da gledas koji ti rekrdi padaju u zadati interval.
Ovo ti je us sustini prvi slucaj, samo za jedno ili dva polja.
A mozes i svaki put kad se menja veza Sasija/Tablica da cuvas rekorde u istoj tabeli. Trebaju ti dva datuma, datum pocetka veze Sasija/Registracija i datum kraja. Rekordi koji imaju NOT NULL u oba datuma se neaktivni, to je bilo pa proslo.
Proizilazi da u svakom rekordu mora da postoji DatumPocetka, a ne mora i DatumZavrsetka. I ni slucajno ne stavlja flag polje "Aktivan", to ionako znas na osnovu dva datuma. Niti Tablica niti sasija ne smeju da se dozvole u nekom novom rekordu ukoliko u tabeli postoji rekord gde je DatumZavrsetka NULL, jer je tada ta tablica/sasija jos uvek aktivna negde drugde. i ne sme DatumPocetka za bilo koji rekord da bude manji od datuma Zavrsetka u neaktivnim rekordima gde se ta sasija/tablica pojavljuju. To ti je kao da cuvas UNION kveri koji sam pomenuo gore, u istoj tabeli odmah.
Sve ovo ne moze automatski u Acessu, nego na nivou aplikacije. Zato preporucujem da ili posao odradis u SQL serveru (jedan dodje i uz Access) ili da povremeno proveravas valjanost podatka (odnosi datuma i tako to)
Ako vec mora Access, ja bih radio prvo resnje, sa dve tabele, lakse je i manje se zapetljas.
:-)