[ MagicDivx @ 01.03.2005. 14:39 ] @
Kako mogu da izbrisem iz tabele proizvoljan broj record-a tako da mi u tabeli ostane x record-a, a da je x definisan u config fajlu???

Konkretan primer je: potrebno mi je da u tabeli imam maksimalno 25 zapisa. Znaci dok se ne popuni broj od 25 nema brisanja, a nakon prelaska zadatog kriterijuma se brisu najstariji (po datumu) podatci tako da u tabeli nikad nema vise ali ni manje od 25.
[ _owl_ @ 01.03.2005. 21:59 ] @
Moguce je ali je potrebno da se izvrsi vise SQL naredbi. Najzgodnije resenje bi bilo da se prilikom ubacivanja podataka u bazu startuje neki triger koji bi proveravao broj postojecih redova i vrsio dodatna brisanja.
[ MagicDivx @ 01.03.2005. 23:29 ] @
Hvala na ideji.

Da li bi mogao da napises neki primer ili bar nesto sto bi malo detaljnije objasnilo postupak?
[ _owl_ @ 02.03.2005. 01:22 ] @
Prebrojis redove u tabeli:
SELECT COUNT(*) FORM tabela
Uporedis sa zadatim brojem, ako je broj redova manji ubacis novi red a ako je broj redova veci treba da izbrises redove koji su visak (ovo moze da bude malo zeznutioji deo, posto treba da utvrdis datum na osnovu koga treba da vrsis brisanje). Bitno je da se sve SQL naredbe izvrse u istoj transakciji (sto takodje moze biti problem posto neki RDBMS-ovi ne dozvoljavaju da transakcija u sebi sadrzi SELECT naredbe).
[ u_m @ 02.03.2005. 11:22 ] @
brise sve unose starije od 1h:
Citat:
DELETE FROM tabela where UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(LastUpdated) > 3600


pa kombinuj malo
[ MagicDivx @ 02.03.2005. 22:08 ] @
Nisam neki expert pa ne znam da li access podrzava unix vreme (znam da MySQL podrzava i to sam dosad kombinovao) pa cu malo da se igram sa tim ali mislim da me nisi razumeo:

Meni je potrebno da u tabeli ostaje ni manje ni vise od x (a x je jednako 25) record-a u tabeli a sto se tice vremena brise se onaj zadnji unet i samim tim ostaje poslednjih x zapisa u tabeli.

Evo konkretno treba mi nacin da proverim koliko u tabeli ima record-a i da to smestim u neku promenjivu (nesto kao Count = SELECT Count(tblNesto.Nesto_ID) AS CountOfNesto FROM tblNesto;) i onda ako je Count manji od x idem dalje a ako je Count >= x ja generisem SQL koji posle pozivam sa DoCmd.RunSQL i brisem nepotrebne zapise ali ne znam kako da dobijem to Count?

Ovo sam dobio kao malu ideju od jedne osobe ali nisam bas razumeo kako da to izvedem "DELETE... WHERE... Not in (SELECT TOP 25...)" pa ako neko zna da ovo iskoristi bilo bi super
[ Zidar @ 03.03.2005. 18:48 ] @
"jedna osoba" ti je dala dobro resenje:
Code:

DELETE * 
FROM tbl25Podataka
WHERE (((Datum) Not In (SELECT TOP 25 Datum FROM tbl25Podataka ORDER BY Datum DESC;)));

Kopiraj ovaj kod u neki editor, pa promeni tbl25Podataka u ime tvoje tabele. pretpostavljam da imas polje 'datum'. Ako ne, promeni i to.

Jos ti treba dugme ili neki kod koji ce da aktivira ovu sql komandu.

:-)

[ MagicDivx @ 03.03.2005. 19:40 ] @
Hvala Zidar ovo je fenomenalno.

Evo i jedan mali fajl koji lepo demonstrira kako to funkcionise