Newsgroup: it.comp.appl.access
Titolo: Determinare l'ID successivo

Salve a tutto il NG!
il mio è un problema piuttosto semplice.. che cmq non riesco a
risolvere.
Stò creando un database per gestire dei curriculum vitae, ed oltre ad
una tabella principale ho creato una tabella per ogni campo che può
avere + di una voce.
Ad esempio le esperienze lavorative passate, c'è una tabella apposta
dove vengono salvate le esperienze lavorative e l'ID relativo alla
tabella MAIN (per farmi capire a quale persona appartengono quelle
esperienze lavorative).
In pratica:
Tabella main:
id - nome - cognome etc
tabella esperienze:
id - id relativo - nome azienda etc
quindi l'id relativo di tabella esperienze sarà uguale all'id della
tabella main, in modo da creare un collegamento.
Visto che io sono psicopatico nella maschera di caricamento del
curriculum gli faccio caricare non la tabella main, ma una tabella
uguale chiamata main_temp, e quando clicco salva mi accoda i valori
sulla principale.
Il problema è l'id relativo ora.. da una maschera che lavora su
main_temp devo capire quale sarà l'id della tabella Main per poterlo
scrivere sulla tabella esperienze!
Prima funzionava tutto bene (usavo il dcount e contavo le voci nella
tabella main) poi mi hanno chiesto di aggiungere una funzione per
eliminare i curriculum ed eliminandoli mi rimangono dei "buchi" nel
contatore rendendo il metodo dcount inutile :(
come potrei fare? tramite ADO? DAO? :O
Grazie mille a tutti in anticipo, spero di essere stato
sufficentemente chiaro ;)

Dmax? 

 Dmax?
ho provato a fare:
Dim curX As Currency, curY As Currency
curY = DMax("[ID]", "Main")
MsgBox curY
e mi dà come risultato "1"
ora io sò che nella mia tabella c'è:
ID 1 = un record visibile
ID 2 = Record cancellato
ID 3 = Record cancellato
quindi il risultato che dovrei avere è 4..
il DMax non và :(

 Dmax?
ho provato a fare:
Dim curX As Currency, curY As Currency
curY = DMax("[ID]", "Main")
MsgBox curY
e mi dŕ come risultato "1"
ora io sň che nella mia tabella c'č:
ID 1 = un record visibile
ID 2 = Record cancellato
ID 3 = Record cancellato
quindi il risultato che dovrei avere č 4..
il DMax non vŕ :(
-----
lascia fare al campo contatore il suo mestiere.
Non preoccuparti di 'prevedere' quel campo.
Creane uno numerico lungo e gestiscilo tu da codice o da query, allora si 
che il numero 1 + 1 = 2 diventa il tuo prox ID.
E' l'unica maniera per gestire questi casi. Chiaramente devi 'allineare' le 
relazioni delle tabelle e delle eventuali maschere e sottomaschere per 
riflettere questa nuova scelta. Vedrai che nel tempo .... paga.
IvanDaBologna 

ok risolto anche se ho dovuto usare un espediente
ho creato un'altra tabella (chiamata "contatore") con una sola voce
(oltre l'ID) chiamata "numero"
numero ha un solo record e si aggiorna ogni volta che si inserisce un
elemento.
dentro la maschera con il caricamento del record ho creato un campo
chiamato "testo48" che rappresenta la mia previsione dell'ID, lo
carico sull'evento on load della maschera con questo codice usando
DAO:
Dim RS As DAO.Recordset
Set RS = CurrentDb.OpenRecordset("contatore")
RS.MoveFirst
Testo48 = (RS.Fields("numero")) + 1
RS.Close
CurrentDb.Close
quando poi vado ad inserire un nuovo curriculum oltre alle normali
operazioni ho aggiunto il codice:
        Dim RS As DAO.Recordset
        Set RS = CurrentDb.OpenRecordset("contatore")
        RS.MoveFirst
        ciao = Testo48
        With RS
            .Edit
            !numero = ciao
            .Update
        End With
        RS.Close
        CurrentDb.Close
in modo da aggiornare questo numero.
Ho postato la mia soluzione per una questione di correttezza, sperando
che qualcuno un giorno la possa trovare utile (io spesso trovo
soluzioni nei topic del 2000 :P )
Ciauz!


A me sembra un falso problema.
Se usi una serie di tabelle temporanee, tutte in relazione tra loro, quando 
l'utente avrà deciso che è il momento di confermare tutto quello inserito 
(nel senso che dovrà essere scritto nelle tue vere tabelle), scrivi (accodi) 
prima il record padre, leggi il suo id e lo utilizzi per le altre query di 
accodamento per i record figli...
Ciao.
-- 
Sergio MAZZA 

 Sergio MAZZA
Si in effetti è una soluzione.. ma per fare così dovrei eseguire una
query di aggiornamento per ogni tabella temporanea da aggiornare.
E' più sicuro in caso di errore in effetti, però preferisco affidarmi
quel piccolo codice postato sopra :P
Sono un amante dell'immediatezza e preferisco appesantire il meno
possibile il carico sulla rete aziendale visto che è già bella
intasata :D
Grazie mille del consiglio cmq, non ci avevo pensato per niente a
questo metodo :D