• 7 odgovora
  • 3.434 pregleda
Update iz treigera 16.06.2008. u 00:07 · pre 223 meseci #1
Radim diplomski na Oraclu 9.i developer suite, forms bilder

Program je za knjižnice.
Na formi za povrat, postavljen je gumb koji nakon unosa id-a (barcod) vrača ime, prezime, datum posudbe.
Isti gumb upisuje datum vračanja, računa zakasninu i upisuje ju u tablicu POSUDBA
Sve radi OK osim dijela koji mora zapisati povrat u tablicu.

dio trigera:
UPDATE POSUDBA
SET DATUM_VRACANJA = datum_vracanja, ZAKASNINA = zakasnina
WHERE POSUDBA.ID_DOKUMENTA = dokument_id AND POSUDBA.DATUM_VRACANJA IS NULL;
commit;

Ako je upisan "commit" pri izvršenju dobijem grešku: FRM-40508: ORACLE error: unable to INSERT record.

Ako se ne upiše u trigeru "commit", poruka o grešci se ne generira, ali niti upis u bazu.

Napominjem: u treigeru ne postoji INSERT.

Molim pomoć ako ikako može i to što prije. Ovo je posljednje što mi je još ostalo za napraviti, a rok za predaju je utorak...

Re: Update iz treigera 16.06.2008. u 07:12 · pre 223 meseci #2
Pretpostavljam da je u pitanju "when button pressed" trigger
Za pocetak proveri koliko redova vraca tvoj upit

select datum_vracanja, zakasnina
from posudba
where POSUDBA.ID_DOKUMENTA = dokument_id AND POSUDBA.DATUM_VRACANJA IS NULL;

proveri da li tu nije problem ako hoces da uradis update jednog sloga a upit vraca malo vise redova. Uzgered commit bi trebao da stoji.
Pozz!
Re: Update iz treigera 16.06.2008. u 07:28 · pre 223 meseci #3
kada uradis commit, u bazu se upisuje ne samo taj update koji pominjes, nego i sadrzaj popunjenog bloka (ako je bazni blok).
Kada uradis commit, i kada ti pokaze gresku, stisni kombinaciju CTRL + SHIFT +E, dobices gresku. Verovatno si zaboravila da na formu postavis neko obavezno bazno polje.
Re: Update iz treigera 16.06.2008. u 10:20 · pre 223 meseci #4
Pomažem pri radu, ona je sada na fax-u.

u trigeru "when button pressed" selekitraju se određeni podaci. Na formi su samo text edit box-ovi (mislim da se tako zovu, ja radim u drugom jeziku, s drugim alatima), nema niti jednog povezanog s bazom.
Po koracima:
1. Unese se id knjige koja se vraća
2. Prisitkom na button:
3. Selektiraju se podaci o članu i knjizi te upisuju u text box-ove
4. Selektira se datum posudbe, od njega se oduzima current_date te ako je veći od 30, razlika se množi s 0.5 i upisuje u text box kao zakasnina
5. Radi se update sloga u POSUDBA, upisuje se datum povrata i iznos zakasnine

select datum_vracanja, zakasnina
from posudba
where POSUDBA.ID_DOKUMENTA = dokument_id AND POSUDBA.DATUM_VRACANJA IS NULL;

vraća jedan slog.

Bem... ti alat... bem... ti bazu...
Re: Update iz treigera 16.06.2008. u 10:21 · pre 223 meseci #5
Iz tvog opisa se ne vidi gde se generiše greška (koji triger je generiše).

Prvo što bih ja uradio je da na nivou cele forme napravim triger ON-INSERT koji ima samo komandu null;

Tako ćeš biti sigurna da se neće desiti slučajan insert.
Re: Update iz treigera 16.06.2008. u 10:36 · pre 223 meseci #6
Na formu je postavljen samo taj triger.
greška se javi kada se nakun

UPDATE POSUDBA SET ....

doda

COMMIT

ako se COMMIT izostavi, greška se ne javlja.
Re: Update iz treigera 16.06.2008. u 13:28 · pre 223 meseci #7
Pogledaj kad pustis formu u run time-u meniju pod help -> display error , mozda dodjemo do greske
Pozz
Re: Update iz treigera 17.06.2008. u 00:41 · pre 223 meseci #8
Problem riješen

Koliko sam sada shvatio: forma, nakon upisa u bilo koji txt field na sebi može biti samo u insert ili qry modu...
Prije sam pokušavao, bez izvršenja qry-a koji bi vratio aktivni podatak napraviti update. Do podataka sam dolazio u trigeru.

Cijelu stvar smo malo okrenuli, najprije vrtimo qry s id_clana i id_knjige, a onda radimo update i commit u WHEN-BUTTON-PRESS treigreu i sve radi ok.

U svako slučaju, hvala na pomoći, a od Oracla se držim što dalje, bar s ovakvim alatima...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme