Newsgroup: it.comp.lang.visual-basic
Titolo: Problemino ACCESS

Una domandina:
In un DB ho un campo contatore.
Se da software elimino un record
nel campo contatore il numero del record cancellato non compare più
Come posso effettuare una rinumerazione dei records?
Grazie

 ha scritto nel messaggio
news:Vc7X9.28497$YG2.8...@twister1.libero.it...

Puoi compattare il database, creare una tabella gemella, copiarci tutti i
dati a uno a uno dentro. Se usi l'INSERT INTO, basta fare DB.Execute "INSERT
INTO Tabella2 Select * From Tabella1" però rischi che gli ID restino
inalterati. Oltretutto poi devi fare la copia al contrario, è troppo
complicato.
Ti conviene gestirti a mano gli ID con un intero lungo e, ogni volta che ti
serve un ID, calcoli con una query il MAX(ID) e ci sommi uno.
--
---
Davide Guida
Responsabile tecnico
FORMAMEDIA s.n.c.
http://www.formamedia.it


Una volta inseriti i record non si puň piů, almeno direttamente. L'unico
metodo sembra quello di compattare il database (funzione
DAO.CompactDatabase), creare una tabella gemella, copiarci i dati dentro a
uno a uno (non con l'INSERT INTO che ti obbliga a inserire a manina l'ID
contatore). Troppo lungo e inutile.
Altro metodo piů agevole sarebbe quello di non usare il contatore, ma
gestirtelo tu ogni volta che fai un Addnew ti prelevi prima il valore
massimo e poi ci sommi uno:
Set RS=DB.OpenRecordset("Select Max(ID) From Tabella")
if RS.RecordCount>0 then MaxID=RS(0) else MaxID=0
MioRS.Addnew
MioRS!ID=MaxID+1
...
MioRS.Update
--
---
Davide Guida
Responsabile tecnico
FORMAMEDIA s.n.c.
via Domenico Fontana 39 Napoli
http://www.formamedia.it
OFFICE: 081.5799803 / 
davide...@formamedia.it
HOME  : 081.5604578 / 
davide...@inwind.it
CELL  : 329.1148088

 nel campo contatore il numero del record cancellato non compare piů



Bye Man!

 Quindi è una abitudine che da molti è deprecata!
Insomma :-I Tutti i dbms che ho visto io hanno un metodo per generare
sequenze. Con SqlServer è semplicissimo, basta impostare la proprietà
IDENTITY nella colonna che si vuole fare diventare una sequenza. IDENTITY
(a,b) accetta anche due argomenti, con il primo si imposta da quale numero
deve partire la sequenza, con il secondo il passo della sequenza. Per
esempio se in CREATE TABLE abbiamo definito una colonna "ID int
IDENTITY(0,5)" la prima riga varrà 0, la seconda 5, poi 10, 15, .. e così
via. In Oracle ci sono le sequenze che sono addirittura degli oggetti e non
delle proprietà, e via così.. il problema, se ne discuteva qualche post fa,
è che _IMHO_ bisognerebbe usare le sequenze solo quando strettamente
necessario..
-- 
Ale
La RFD originale per it.comp.dotnet su
http://www.sen.it/stoa/articles.asp?id=10
Se vuoi discuterne, vai su it.news.gruppi

 Insomma :-I Tutti i dbms che ho visto io hanno un metodo per generare
No mi hai frainteso!
anzi mi son spiegato male va!
...E' che non ci puoi contare su tutti i db!
Se uso pesantemente i contatori mi lego ad access...solo per questo...se mi
chiedono di cambiare DataBase impazzo oltre il dovuto!
Poi lo so che altri DB hanno anche sistemi migliori del contatore di Access!
.....é il rapporto Fatica/Nuova implementazione che per me è importante!
:-)
Dai era per insegnare ad un newbie! ...li ho insegnato male???

 Dai era per insegnare ad un newbie! ...li ho insegnato male???
No, infatti ho fatto una piccola notazione solo sulle sequenze, è che
stanotte non ho dormito, e probabilmente mi è pure andata di traverso la
colazione ;-)


Non so come ringraziare
Mi sembrava di avere fatto una domandina alla quale ci sarebbe stata una
rispostina
Ma vedo che la domanda ha avuto una risposta molto ampia, anche troppo
Forse mi sono confuso un poco.
Grazie comunque
Cerchero di creare un campo numerico da riordinare da software
Grazie ancora, buon lavoro a tutti e salutoni