Nasao sam alat: EMS SQL Menager 2005 for InterBase & Firebird -preporucujem ga!
Nastelovao sam generator da funkcionishe na sledeci nachin:
napravim generator:
Code:
CREATE GENERATOR probaid
napravim trigger:
Code:
CREATE TRIGGER tabela_ciji_se_primarni_kljuc_generishe_BI FOR tabela_ciji_se_primarni_kljuc_generishe
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
if (new.primarni_kljuc is null) then
new.primarni_kljuc = gen_id(probaid,1);
END
Sve funkcionishe cool!
-------------------------------------------------------------------------------------------------------
Sledece je da upisani kljuc iscitam, i koristim dalje u aplikaciji.
(trenutno mi stoji reshenje SELECT MAX(primarni_kljuc).. ,ali kao sto je u prethodnim postovima diskutovano otvara mogucnost greske)
Probao sam sa:
Code:
SELECT GEN_ID( probaid, 1 ) FROM tabela_ciji_se_primarni_kljuc_generishe
ALI mi to vraca nekoliko uzastopnih vrednosti pocevsi od one koja bi trebalo SAMA da se pojavi(?!). To prouzrokuje pogresnu vrednost generatora prilikom sledeceg okidanja. (postovao sam ranije ovaj problem)
Jel ima efikasnog objasnjenja za ovaj scenario?
Da li je resenje:
Code:
SELECT GEN_ID( probaid, 0 ) FROM tabela_ciji_se_primarni_kljuc_generishe
Ne bih pocinjao da "cheprkam po mraku" dok ne stignu saveti.
POSITION -cemu sluzi? Probao sam sa razlicitim vrednostima ( 0,1,2...), ali nisam primetio razlicita ponasanja. Jel se to odnosi na redni broj kolone?
Hvala puno na dosadasnjoj pomoci!