Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 5.924 pregleda

Najnovija ↓

Kako uraditi slijedece sa Generatorom 19.05.2005. u 18:44 · pre 261 mesec #1
Imam jednu tabelu koja ima recimo dva polja, redni broj (generator) i vrijednost npr.
broj vrijednost
1 5
2 4
3 2

kada iz ove tabele izbrisem npr broj 2 ona izgleda ovako
broj vrijednost
1 5
3 2

ostaje broj 1 i 3, kako da uradim da mi to sve preslaze po redosljedu da nemam tih "supljina" vec da bude 1,2,3,4....

Koristim delphi i interbase
Potpis
Ako neznas pitaj... ako mozes pomozi..
Re: Kako uraditi slijedece sa Generatorom 19.05.2005. u 19:54 · pre 261 mesec #2
Sa Firebirdom moze ovako (valjda moze i sa IB):

Napravi AfterDelete trigger za tu tabelu:

CREATE TRIGGER ime_triggera FOR ime_tabele active after delete AS
update ime_tabele set broj=broj-1 where broj>old.broj
Re: Kako uraditi slijedece sa Generatorom 19.05.2005. u 21:39 · pre 261 mesec #3
pokusao sam da napisem: CREATE TRIGGER "brisanje" FOR "RACUN" ACTIVE after delete AS update RACUN set broj=broj-1 where broj>old.broj

ali neradi jbga imal jos tko kakvu ideju?
Potpis
Ako neznas pitaj... ako mozes pomozi..
Re: Kako uraditi slijedece sa Generatorom 19.05.2005. u 23:55 · pre 261 mesec #4
Ne javljam se sa idejom :) vec sa pitanjem koji smisao ima to polje, ako mu je vrednost tako promenjiva. Nije valjda da to koristis da bi prilikom prikaza u programu imao redne brojeve?

Ako zamislimo da tvoj program radi sa puno radnih stanica istovremeno, i da ima brisanja ovakog kako ti ljudi predlazu, dolazi do potencijalnog zakljucavanja dobrog dela slogova tabele koji ostaju blokirani (hard lock) do kraja transakcije, praveci problem drugim transakcijama koje istovremeno pokusavaju to isto da urade, dovodeci u pitanje performanse celog sistema. Da ne pominjemo sta se desava sa korisnicima koji su vec ucitali podatke i imaju pogresnu sliku o podacima, jer dok oni gledaju tabelu redni brojevi mozda vise nisu ni validni. Naravno ovo sve vazi za sistem gde vise korisnika pristupa istovremeno bazi, cega kod teba mozda i nema tako da mozes i da preskocis upozorenje. Ali mozda je korisno onima koji imaju pomenuto okruzenje (vise korisnika na jednoj bazi).

Znaci ako je za redne brojeve nadji drugo resenje. Recimo napravi InternalCalc polje (ClientDataSet) ako koristis troslojni princip (pa makar u 2-tier aplikaciji) pa u njemu drzi redni broj. Ima jos resenja.
Re: Kako uraditi slijedece sa Generatorom 20.05.2005. u 00:03 · pre 261 mesec #5
ako ces iskreno to polje je redni broj racuna, napravio sam pc kasu i svaki racun ima svoj redni broj, sada pravim programcic da bi mogao da obrisem "pokoji" racun al naravno da mi preslaze redne brojeve, nema radnih stanica vec je samo jedan racunar imas li kakvu ideu kako bi to mogao da rijesim?
Potpis
Ako neznas pitaj... ako mozes pomozi..
Re: Kako uraditi slijedece sa Generatorom 20.05.2005. u 00:12 · pre 261 mesec #6
Nadam se da si predvideo da racuni koji su izdati ne smeju menjati redni broj (bar koliko ja znam :)) Brisanje ima smisla mozda samo za zadnji racun, ali onda ne moras nista da preslazes samo uzmes ponovo taj broj. Mozes i da posle brisanja izvrsis upit koji radi izmene brojeva ili uradi trigger pa kud puklo :)

Code:

Set term ^;
CREATE TRIGGER brisanje FOR RACUN
ACTIVE AFTER DELETE POSITION 0
AS
BEGIN
  update RACUN set RACUN.broj=RACUN.broj-1 where RACUN.broj>old.broj;
END^
Re: Kako uraditi slijedece sa Generatorom 20.05.2005. u 01:01 · pre 261 mesec #7
Milos je u pravu, moras da znas da u finansijskom poslovanju nema brisanja ( DELETE zaboravi ), jedino je dozvoljeno storniranje a to je onda druga prica, imas dodatno polje storno u tabeli racuni i to je to, ako je 1 onda znas da je storniran i storniras sve stavke tog racuna, kraj price.

Pozdrav
Re: Kako uraditi slijedece sa Generatorom 20.05.2005. u 16:32 · pre 261 mesec #9
U trigeru prvo povecaj sve brojeve za veliki broj (za vise redova velicina veci od njih),
npr milion, a zatim ih umanji za milion i jedan.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme