[ kristina_ksk @ 16.06.2008. 00:07 ] @
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...

[ alfa00 @ 16.06.2008. 07:12 ] @
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!
[ aldabic @ 16.06.2008. 07:28 ] @
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.
[ franjo_tahi @ 16.06.2008. 10:20 ] @
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...
[ djoka_l @ 16.06.2008. 10:21 ] @
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.
[ franjo_tahi @ 16.06.2008. 10:36 ] @
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.
[ alfa00 @ 16.06.2008. 13:28 ] @
Pogledaj kad pustis formu u run time-u meniju pod help -> display error , mozda dodjemo do greske
Pozz
[ kristina_ksk @ 17.06.2008. 00:41 ] @
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...