Newsgroup: it.comp.appl.access
Titolo: successivo ID di un contatore?

Data una tabella che contiene un campo (ID) contatore esiste una proprietą o
una funzione che mi dica il successivo valore di ID che intende assegnare?
Spero che la risposta non sia cerca  MAX (id) e poi aggiungi 1 (o quanto hai
fissato per l'incremento...)
perche se si cancella l'ultimo record la funzione non funzia ...
ciao Dan P

perche se si cancella l'ultimo record la funzione non funzia ...
Invece è proprio così !
Qual è l'esigenza da cui nasce la domanda ?
Forse hai bisogno di un progressivo gestito da programma.
In tal caso l'argomento è trattato sul sito comune.
Vincenzo Turturro
---------------------------------------------------------
Se no diventiamo tutti **** dai portatili o peggio ancora 
provetti poeti fiorentini come vturturro.
(Così disse 
ivan....@tiscalinet.it
 Ven 25 Aug 2000 09:34:52 +0200)

 wrote in message
39acc913...@firewall.regione.toscana.it...



ad una prima occhiata non ho trovato proprietà che dicano quale sia il valore
del prossimo contatore, comunque una soluzione potrebbe essere quella di
aggiungere un campo NUOVOCONTATORE alla tabella, dove registri il numero
dell'ultimo valore del contatore che è stato creato.
Cioè:
Quando viene richiesta la creazione del nuovo record, verifichi che la tabella
non sia vuota, nel qual caso chiedi se si vuole creare il record 1, altrimenti,
ti sposti sull'ultimo record, leggi il valore di NUOVOCONTATORE e chiedi se si
vuole creare il record corrispondente al valore del NUOVOCONTATORE + 1, se la
risposta è affermativa crei il nuovo record e al campo NUOVOCONTATORE assegni il
valore del contatore stesso di quel record.
Quando vai a cancellare l'ultimo record record invece, memorizzi il valore del
suo id, lo cancelli e su quello che diventa l'ultimo record aggiorni il valore
di NUOVOCONTATORE al valore dell'id che ai memorizzato (quello del record
cancellato).
con questo sistema però, quando svuoti la tabella devi eseguire la compattazione
del db.

 ha
scritto:
Tutte le tue considerazioni sono corrette.
Però mi portano a chiderti se è proprio necessario proporre nel msgbox
l'ID del nuovo record.
Del resto la natura del campo di tipo contatore (chiave univoca
gestita automaticamente dal motore del db) richiede che non ci possano
essere ripensamenti sull'assegnazione del valore a tale campo sui
nuovi record.
Ammetti per un attimo che Access ti dia la possibilità di conoscere il
prossimo ID senza bisogno di creare un nuovo record: in
un'applicazione in rete, due utenti che chiedessero nello stesso
momento la creazione di un nuovo record, si vedrebbero proporre nella
msgbox lo stesso ID, ma al momento della scrittura del nuovo record,
tale valore verrebbe assegnato solo a quello creato per primo !
----------------------------------
Se no diventiamo tutti Ilbi dai portatili o peggio ancora 
provetti poeti fiorentini come vturturro.
(
ivan....@tiscalinet.it
 Ven 25 Aug 2000 09:34:52 +0200)

 wrote in message
39AD2A6E...@interlogica.it...


 tale valore verrebbe assegnato solo a quello creato per primo !
concordo pienamente...
ma volevo suggerire di usare un IDContatore Casuale e non Incrementale..
così la paura di avere dei "buchi" perde di significato...

Con il progressivo almeno sei sicuro che a numero piu grande Corrisponde un
record più nuovo (non è molto ma non lo butto via)
Meglio un formaggio con alcuni buchi che dei buchi con alcuni pezzi di
formaggio....
ciao dan
Rupen <gi...@silink.it.CANCELLAMI> wrote in message
newscache$o8660g$7k6$1...@news.silink.com...


 ciao dan
un' altro metodo ci sarebbe....
potresti infatti crearti una proprietà nella tabledef della tabella che ti
interessa, chiamato ad esempio UltimoID, impostato inizialmente a 0
Set pippo = dbs.TableDefs("Tabella1")
Dim prp As Property
Set prp = pippo.CreateProperty
prp.Name = "UltimoID"
prp.Type = dbLong
prp.Value = 0
pippo.Properties.Append prp
e ad ogni inserimento lo aggiorni con il numero di ID del record appena creato.
Public Sub AggiornaUltimoID(ByVal NomeTabella as string, ByVal ID as Long)
    CurrentDB.TableDefs(NomeTabella).Properties("UltimoId").value = ID
end sub
Poi quando vuoi sapere che numero avrà il successivo id non fai altro che
leggere la proprietà UltimoID della tabledef e aggiungere 1
Public function ProssimoID(byval NomeTabella as string) as long
    prossimoid = currentdb.tabledefs(nometabella).properties("UltimoId").value
end function