[ Bojan11 @ 08.06.2006. 15:35 ] @
| Pomozite ljudi nikako da riješi ovaj problem,
trebao bi napraviti bazu (Access) u kojoj će se vrtjet 10000 podataka, znači kad uđe 10001 da se 10000 izbriše, kako da to napravim ??
Pokušao sam sa datasetom ali je to previše podataka pa ga adapter u jednoj operaciji ne uspije napuniti provjeriti dali ima u njemu 10000 pod. i ako je narasao za jedan da ga obriše...
Mislim da bi bilo bolje to riješit sa Command-om ,
Code: Dim kom1 As New System.Data.OleDb.OleDbCommand("SELECT COUNT(*) FROM DNTTransakcije", konekcija)
ali kako sa reći da ako je broj 10000 izbriši prvoga??
ili ima neko bolje rješenje?
HVALA puno |
[ mmix @ 08.06.2006. 17:36 ] @
Treba ti ovaj SQL, moras da imas AutoNumber polje u tabeli (ovde je ID, ti verovatno imas vec neko drugo), ovime ce ti se transaction tabela ponasati kao FIFO i zadrzati samo 10000 najsvezijih transakcija (pozivas je nakon sto insertujes 10001 red.
Code:
delete from DNTTransakcije
where ID not in (SELECT TOP 10000 ID
FROM DNTTransakcije
order by ID desc);
[ Bojan11 @ 08.06.2006. 22:14 ] @
Hvala mmix,
imam još jedno pitanjce, kako riješiti problem ID-jeva, ako radim ovako sa brisanjem prvoga kad u bazu stigne 10001 onda če mi ID rasti u nedogled, znači oni če rasti, a ja ću one prve brisat....kako to rješavate? Dali se da izvest da ih nakon nekog vremena resetiram na počenu vrijednost da krenu od nule?
I do koliko mogu rasti...inače za ID imam posebnu kolonu u kojem je autonumber, nemogu neku već postojeću kolonu upotrijebit jer nemaaju jedinstvene podatke!
HVALA
[ mmix @ 08.06.2006. 22:57 ] @
Citat:
Bojan11: Hvala mmix,
Dali se da izvest da ih nakon nekog vremena resetiram na počenu vrijednost da krenu od nule?
I do koliko mogu rasti...inače za ID imam posebnu kolonu u kojem je autonumber, nemogu neku već postojeću kolonu upotrijebit jer nemaaju jedinstvene podatke!
HVALA
Iskreno ne resava se, sve zavisi od toga koliko ce redova ulaziti u bazu za lifetime aplikacije. Ako prelazi 2 milijarde onda AAutoNumber (Long) nije dovoljan :) i mora da se koristi neko drugo resenje, ali u praksi je to bas bas retko. Cak i ako uzmes u jednom trenutku i re-key sve redove da krenu od nula (mada sumnjam da access dozvoljava takvo nesto), autonumber polje ce i dalje imati svoj counter koji ne mozes promeniti. Alternativno, mozes da kreiras novu temp tabelu sa istim kolonama, iskorpiras svojih 10000 transakcija (onda ce IDevi krenuti od 1) i na kraju obrises staru tabelu a novu preimenujes u DNTTransakcije, ali ovo je sve manualno odrzavanje.
Ako vec imas Autonumber kolonu iskoristi nju u gornjoj skripti.
[ Bojan11 @ 09.06.2006. 21:47 ] @
hvala
[ VerbatimBOT @ 20.06.2006. 01:24 ] @
Ovo sa privremenom tabelom bi moglo da se izvede ako se ne narušava referencijalni integritet. Jel ima neko alternativno rešenje ako se tako narušava?
[ Shaggy @ 21.06.2006. 14:27 ] @
Posto vec postoji AutoID polje:
Dim kom1 As New System.Data.OleDb.OleDbCommand("SELECT COUNT(*) FROM DNTTransakcije", konekcija)
Dim n as Integer
n = kom1.ExecuteScalar()
If n = 1000 Then
Kom1.CommandText = "DELETE FROM DNTTransakcije Where AutoID = (SELECT MIN(AutoID) FROM DNTTransakcije)"
Kom1.ExecuteNonQuery()
ENd if
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.