Pitanje: Hvala. Interesuje me da li je ovo dobro rešenje da se ograniči unošenje zaključne ocene il ima neko bolje rešenje osim sa VBA?
Odgovor: Resnje je odlicno, mnogo bolje nego bilo kakav VBA kod. Ogranicenje je na nivou tabele i tu nema greska. Daj boze kad bi vecina ljudi koji se bave bazama podataka razmisljala na taj nacin. Cestitam.
Jedino moze da se malo jednostavnije napise uslov.
Uslov koji si postavio glasi: Ako postoji ocena za popravni, onda mora da bude zavrsna ocena 1.
Matematickom logikom iskazano to je P=> Q gde su P = "Postoji ocena za poravni" i Q = "Zavrsna ocena je 1".
Ovako nekako: ([PopravniOcena]<>"") => ( [ZakljucnaOcena]=1])
U Accessu imas pored AND, OR, NOT logickih operatora i operatore IMP (implikacija, =>) i EQV (ekvivalencija, <=> )
Pravilo validacije moze da se napise: ([PopravniOcena]<>"") IMP ( [ZakljucnaOcena]=1])
Ako nemas IMP i EQV, onda se P=>Q pise kao (NOT P) OR Q. EQV se pise ( (NOT P) OR Q) AND ((NOT Q) OR P). Ko ne veruje neka napravi tablicu istinitosti da se uveri. NOT P OR Q se koristi na primer u MS SQL serveru.
Primer:
Code:
Pravilo: [Popravna]>0 Imp [Zavrsna]=1
CREATE TABLE (
Ucenik text PRIMARY KEY,
Zavrsna int NOT NULL CHECK (Zavrsna >0) ,
Popravna int NULL CHECK (Popravna >0),
CONSTRAINT [Popravni se dozvoljava samo ako je zavrsna ocena 1] CHECK( [Popravna]>0 Imp [Zavrsna]=1)
)
Dopustene vrednosti:
Ucenik Zavrsna Popravna
A 3
B 1
C 1 3
Ako probas da unseses vrednost za Popravna kad je Zavrsna>1, nece moci. Ali moze da bude Zavrsna=1 a da Popravna ne postoji.
Naravno, Zavrsna je Required (NOT NULL), a popravna nije required (moze da ostane prazna, a kad je zavrsna > 1 onda MORA da bude prazna )
Ako je popravna NULL oda se CHECK (Popravna >0) ignorise.
:-)