Newsgroup: it.comp.appl.access
Titolo: id chiave ad incremento automatico o no

Volevo un vostro parere sul campo diciamo 'contatore' o identificatore
univoco del record.
Bellissima la funzionalità di incremento automatico ma in caso di
copia di records con svariati records di altre tabelle 'correlati' sul
quel campo diventa un bagno di sangue. Ci vogliono svariate righe di
codice per spostare un record e i correlati senza perdere l'integrita'
della struttura.
Attualmente gestisco la situazione con tonnellate di codice, ma sto
ripensando alla struttura generale e mi chiedo se non sia piu'
semplice gestire l'id incrementandolo al momento (con il vantaggio di
sapere anche prima dell'inserimento fisico il reale valore che
assumera').
So' che non e' una domanda vera e propria ma voi come vi regolate in
fase di design del db su questo argomento?
iv4n
PS
ho modo di prelevare dati da un grosso db SQL e li' non esiste una
tabella con campo autoincrementante. Ho avuto sfortuna io oppure e'
poco usata?

 ha scritto nel messaggio 
news:42a8d0d6-22b5-45b4...@d23g2000prj.googlegroups.com...


iv4n

Io non ho mai usato il CONTATORE
Ogni tabella ho creato ID in questo modo:
Dim UltimoID as variant
UltimoID = DMax("[ID]", 
"TuaTabella","(Int([ID]/100000))=((Yea(Date()))-1995)")
  If IsNull(UltimoID) Then UltimoID = ((Year(Date) - 1995) * 100000)
In questo modo sai in che anno è stato creato
Per la partenza puoi cambiare 1995 e se ti servono altri numeri per anno 
puoi moltiplicare per 1000000
Saluti
Graziano

 
do per scontato che sql = ms sql
sql server di ms ha i campi int che si possono autoincrementare.
tra le proprieta' disponibili per una colonna int e' presente anche 'is 
identity'; impostata a true, attiva in pratica l'autonumerazione.
su sql e' anche abbastanza semplice gestire lo spostamento/copia di 
tabelle con questi campi, perche' la proprieta' di cui sopra e' 
disattivabile; in questo modo crei la colonna int di destinazione, ci 
copi i valori della tabella originale e poi attivi l'identita': hai 
copiato i dati mantenendo gli id esistenti e adesso hai l'autoincremento.
per altri rdbms non saprei, ma suppongo che ognuno abbia il suo campo 
autoincrementante.
-- 
Paolo opg
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

Paolo opg ha scritto:

Manco io uso il contatore...ho preparato delle funzioni che mi porto dietro in
tutti i db che faccio per trovare il valore massimo del campo. So che così non
si rischiano problemi, ma a mio parere sono rischi trascurabili e soprattutto
controllabili. Con SQL server puoi farti una stored che ti restituisca il
valore desiderato e far gestire tutto al motore del db: hai la garanzia che
tutto andrà bene 
-- 

grazie a tutti per le risposte.
L'unico problema della gestione dell'incremento e' nel caso che molti
utenti cerchino di inserire contemporaneamente un record nella stessa
tabella ... ma credo che con una tabellina di appoggio, che tiene
'congelato' un probabile valore e non lo rende disponibile agli altri,
si possa ovviare a questo problema.
Per quanto riguarda SQLserver dicevo solo che nelle tabelle che ho
visto non e' presente nessun campo autoincremento, probabilmente  anke
loro se lo gestiscono 'in proprio' !
grazie,   iv4n