Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Autoincrement. Jel' ja nesto gresim ... ?

[es] :: Firebird/Interbase :: Autoincrement. Jel' ja nesto gresim ... ?

[ Pregleda: 3649 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

smitic

Član broj: 182529
Poruke: 6
77.28.135.*



Profil

icon Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 11:46 - pre 193 meseci
Problem 1.
Koristim Firebird 2.0. (probao sam sa 2.1 ali nisam mogao da pristupim iz Delphi 7 preko Zeos-a pa sam 'downgrade'-ovao na 2.0 ;) ). Napravim bazu (Firebird maestro), napravim tabelu, sa autoincrement poljem (imam triger, imam generator). Naizgled sve je u redu. Kada pristupim iz Delphi-ja, preko Zeos-a (protokol firebird 2.0, itd, itd.) stavim dbgrid na form i 'vidim ' tabelu. Medjutim ako pokusam da dodam slog, javlja mi da, na pr., AutoID (autoincrement polje) 'must have a value'. S jedne strane je logicno, jer ne moze da bude null, s druge nije, jer valjda triger treba da odradi svoje ... Ja, naravno, u dbGridu u coloni AutoID ne upisujem nista. Ako upisem nesto (neki integer, naravno) u tabelu se upisuje Autoincrement vrednost a ne vrednost koju sam ja uneo!!! Sto ce reci, autoincrement radi!!! Ili ne radi, nista mi nije jasno ...

Problem 2.
Da bih resio Problem1 u tabelu stavljam da polje AutoID, iako je primary key, MOZE da bude null. Onda mi Delphi ne javlja nikakvu poruku, ali mi polje AutoID ostaje prazno I POSLE POST-a!!?? Znaci, upisem sva ostala polje, ostavim AutoID prazno, predjem na sledeci (ili prethodni) red (impliciram POST) ali polje AutoID ostaje null (ili 0 ili prazno, sta vec ...)!!!

Posto mi je ovo prvi test za Firebirdom i Zeos-om, prvo sumnjam u sebe, ali ne znam gde da trazim gresku. Da sve bude interesantnije, ako umesto moje, novonapravljene baze, pristupam starijoj (1.5) bazi (koju, instini za volju, nisam pravio ja) sa isto generiranim trigerima i generatorima, sve radi bez greske.

Ima li pomoci? Ili da se vratim na FB 1.5 pa da probam?


P.S. Da ne zaboravim, u P2, AutoID polje ostaje null dok ne zatvorim i ponovo otvorim bazu/tabelu! Ustvari ono dobije autoincrement vrednost samo sto mi se to ne vidi u DBGrid-u i ne mogu da ga koristim u Master-Slave relacijama !!!






[Ovu poruku je menjao smitic dana 26.05.2008. u 12:58 GMT+1]
 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.imlek.co.yu.



+49 Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 13:34 - pre 193 meseci
Mislim da nije stvar do verzije FB-a. Davno sam imao taj problem i koliko se secam, stvar je u triggeru. Kako si postavio trigger? After insert ili nesto drugo?
ERROR974
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 14:17 - pre 193 meseci
> Medjutim ako pokusam da dodam slog, javlja mi da, na pr., AutoID (autoincrement polje) 'must have a value'.

To nije FB poruka već poruka od komponenti koje koristiš, moraš podesiti TField tako da mu naznačiš da će vrednost dobiti preko generatora. Različite biblioteke imaju različite načine kako se to podešava, tako da ti ne mogu konkretno pomoći za Zeos, potraži u helpu ili gledaj njegov kod.

> Da bih resio Problem1 u tabelu stavljam da polje AutoID, iako je primary key, MOZE da bude null. Onda mi Delphi ne javlja nikakvu poruku, ali
> mi polje AutoID ostaje prazno I POSLE POST-a!!?? Znaci, upisem sva ostala polje, ostavim AutoID prazno, predjem na sledeci (ili prethodni)
> red (impliciram POST) ali polje AutoID ostaje null (ili 0 ili prazno, sta vec ...)!!!

Znači u bazi polje dobije vrednost novog generatora ali se ta vrendost ne prenese u dataset komponente? Opet je to stvar podešavanje komponenti, kao i za prethodni slučaj. Ako ne uspeš da nađeš način da to podesiš u Zeosu, koristi ručni metod, dakle pre posta sam pošalješ zahtev za dobijanje novog generatora, tu vraćenu vrednost smestiš u polje i onda polje insertuješ u bazu.
 
Odgovor na temu

smitic

Član broj: 182529
Poruke: 6
79.125.233.*



Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 16:57 - pre 193 meseci
Hvala vam na brzoj reakciji ...

> Mislim da nije stvar do verzije FB-a.

Niti sam rekao je problem u tome. Stvar je da FB 2.1 nece da radi nikako a sa FB2.0 imam 'male' probleme.

> After insert ili nesto drugo?

Triger je postavljen before insert i aktiviran je.

> ali se ta vrendost ne prenese u dataset komponente

Za probu koristim obican DBGrid koji 'automatski' prenosi vrednosti. Isto je i ako koristim DBEdit ili bilo koju data aware komponentu.
Cak i obican ZTable.refresh mi popuni polje korektnom vrednoscu. Ali onda 'izgubim' tekuci slog, pa moram da ga pamtim, pa da ga trazim ... Ako mora tako, onda je u redu ali bar da znam da mora pa da se snalazim :(


 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.ptt.yu.



+49 Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 17:00 - pre 193 meseci
Probaj sa trigerom na after insert.
ERROR974
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
*.adsl-a-1.sezampro.yu.



Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 17:10 - pre 193 meseci
@smitic

Imam iskustva sa ZeosLib komponentama, te predlažem, ako već radis sa FB, da ih batališ i prebaciš svoj rad na neke druge komponente koje su namenjene Delphi/FB. Lično, prezadovoljan sam sa FibPlus komponentama, koje su komercijalnog karaktera.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

smitic

Član broj: 182529
Poruke: 6
79.125.233.*



Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 17:24 - pre 193 meseci
Citat:
Vic: Probaj sa trigerom na after insert.


Probao ... Nece uopste da ga kompajlira '...because ... column is derived from SQL function or expression ...'

Citat:
Miloš Baić: @smitic

Imam iskustva sa ZeosLib komponentama, te predlažem, ako već radis sa FB, da ih batališ i prebaciš svoj rad na neke druge komponente koje su namenjene Delphi/FB. Lično, prezadovoljan sam sa FibPlus komponentama, koje su komercijalnog karaktera.


Ja sam Zeos koristio malo, sa MSSQL serverom, i ucinilo mi se da su OK. Za male projekte sam hteo da iskoristim FB pa sam tako dosao do ovakve kombinacije. Ocigledno cu morati da probam nesto drugo. Ustvari pravo pitanje je: vredi li se muciti oko FB?

 
Odgovor na temu

Vic
Error974
BI&SE
Beograd

Član broj: 16118
Poruke: 396
*.ptt.yu.



+49 Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 17:53 - pre 193 meseci
FB vredi a mozes da koristis dbexpress komponente koje dolaze uz delphi. Samo mi nije jasno kakve veze ima FB i trigeri sa kompajliranjem delphi aplikacije?
ERROR974
 
Odgovor na temu

smitic

Član broj: 182529
Poruke: 6
79.125.232.*



Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?26.05.2008. u 21:46 - pre 193 meseci
Citat:
Vic: FB vredi a mozes da koristis dbexpress komponente koje dolaze uz delphi. Samo mi nije jasno kakve veze ima FB i trigeri sa kompajliranjem delphi aplikacije?


Ne radi se o kompajliranju delphi aplikacije, nego Firebird Maestro kompajlira triger!

Hvala svima na savetima i misljenjima.
 
Odgovor na temu

Miloš Baić
Miloš Baić
ERP (Dynamics NAV) programer
Beograd

Član broj: 72468
Poruke: 1155
77.46.231.*



Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?27.05.2008. u 12:39 - pre 193 meseci
FB je vrlo dobro rešenje, pogotovo u kombinaciji s delphijem. Ne moraš ići preko trigera, mada nije loš način. Napravi generator i pozovi ga na event OnBeforeInsert gde će ti vratiti vrednost koju ćeš uneti u tabelu sa ostalim atributima iz sloga.
Someone's sitting in the shade today because someone planted a tree a long time ago.
 
Odgovor na temu

dogriz
Sombor

Član broj: 29744
Poruke: 259
*.dynamic.sbb.rs.

Sajt: dogriz.blogspot.com


+6 Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?28.05.2008. u 06:46 - pre 193 meseci
Dva načina rada sa "autoincrement" primary poljima u Delphi-u koja su se pokazala kao dobra i dosta pouzdana (oba primera su za BeforeInsert):
1. način:
Trigger izgleda ovako:
Code:

  IF (NEW.SIFRA IS NULL) THEN
    NEW.SIFRA = GEN_ID(GEN_SIFRA_ID, 1);

U ovom slučaju najbolje rešenje je iz Delphija pri svakom novom unosu u bazu koristiti sledeći upit:
Code:

SELECT GEN_ID(GEN_SIFRA_ID, 1) FROM RDB$DATABASE

Ovaj kod vraća vrednost generatora ("autoincrement" polja SIFRA) uvećanu za 1 i ta vrednost se koristi za INSERT novog sloga u bazu.

2. način:
Trigger okidati ovako:
Code:

  NEW.SIFRA = GEN_ID(GEN_SIFRA, 1);

U ovom primeru vrednost polja SIFRA se automatski generise pri svakom unosu podataka u bazu, bez obzira da li se vrednost za to polje eksplicitno unese ili ne.
Tada je iz Delphi aplikacije moguće uvek proslediti istu vrednost SIFRE (npr. -1), jer će ta vrednost svakako biti zanemarena i dodeljena vrednost generatora, a delphi se neće buniti. Kod ovog primera jedino je neophodan refresh podataka, da bi se videla prava vrednost SIFRE.

Ja više koristim prvi metod i to u okviru OnNewRecord ili BeforePost ClientDataSet-a.
 
Odgovor na temu

smitic

Član broj: 182529
Poruke: 6
79.125.233.*



Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?30.05.2008. u 23:59 - pre 193 meseci
> Kod ovog primera jedino je neophodan refresh podataka, da bi se videla prava vrednost SIFRE.

Greska je dakle bila sto sam ocekivao "automatski refresh" odnosno da se vrednost autoincrement polja automatski pojavi u data aware componenti. Nije mi jasno zasto, ali je dobro da bar znam na cemu sam. Znaci greska nije u meni, niti u Zeos-u, niti u Firebirdu ... To jednostavno tako treba da radi i - gotovo ...




 
Odgovor na temu

smitic

Član broj: 182529
Poruke: 6
79.125.235.*



Profil

icon Re: Autoincrement. Jel' ja nesto gresim ... ?31.05.2008. u 22:29 - pre 193 meseci
Citat:
smitic: > Kod ovog primera jedino je neophodan refresh podataka, da bi se videla prava vrednost SIFRE.

Greska je dakle bila sto sam ocekivao "automatski refresh" odnosno da se vrednost autoincrement polja automatski pojavi u data aware componenti. Nije mi jasno zasto, ali je dobro da bar znam na cemu sam. Znaci greska nije u meni, niti u Zeos-u, niti u Firebirdu ... To jednostavno tako treba da radi i - gotovo ...


Pa ljudi jeli to moguce??!!!

Ipak, ipak, ipak ... postoji legalan nacin da se izvede automatski refresh autoincrement polja u kombinaciji Zeos-Firebird-Delphi !!!

Sve vreme me je mucilo sto za jednu uobicajenu, toliko cesto koriscenu operaciju mora da se koriste dodatni koraci. OK, nista strasno, jos jedan query ili refresh tabele ali ... Opet mi nije logicno. A resenje je ipak tu. Pred ocima. Samo malo desno ...


ZSequence komponenta !!!. I lepo povezes s generatorom. ZTabeli kazes koji je SequenceField i koji ZSequence da koristi i ... to je to. Prosto, lepo, elegantno, brzo, automatski ... kako i treba da bude!

Tu bi, verovatno, mogli da zatvorimo ovu temu. Drago mi je sto sam je otvorio i sto je ja i zatvaram. Nadam se da smo svi usput nesto naucili !!!

Pozdrav svima ...
 
Odgovor na temu

[es] :: Firebird/Interbase :: Autoincrement. Jel' ja nesto gresim ... ?

[ Pregleda: 3649 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.