Newsgroup: it.comp.appl.access
Titolo: Campo ID

Il mio problema è il seguente:
In un database Access per la registrazione e
gestione delle attività dell'azienda dove lavoro
ho una tabella in cui la chiave primaria è il campo
IDContratto e i cui valori purtroppo devono essere
inseriti in questa forma:
L2000-0001
L2000-0002
L2000-0003
ecc.
dovendo essere conformi ad un sistema precedente.
Ora alle Proprietà campo come Valore predefinito
ho messo:
="L" & Year(Date()) & "-"
e così ogni volta devo digitare manualmente il
resto.
C'è la possibilità di automatizzare l'immissione,
o almeno fare in modo che il campo abbia una
dimensione prestabilita e che all'operatore
basti digitare 1 per avere 0001 o 10 per avere
0010?
Una risposta per la mia gratitudine eterna ;-)
--
Fabrizio Domiziani
dom...@tin.it
--
Fabrizio Domiziani
dom...@tin.it



 ha scritto nel messaggio
news:3Z8e#DdNAH...@newsmst.mcis.galactica.it...

La risposta la trovi nel Sito Comune.
--
Roberto
---------------------------------------------
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------

Questa funzione, se non mi sono dimenticato qualche parentesi, ti
restituisce il prossimo numero di contratto. Potresti inserirla come valore
di default del controllo, oppure direttamente attribuire al controllo il
valore restituito dalla funzione.
'///////////////////////////////////////////////////////////////////
function ProssimoNumeroContratto() as Variant
'///////////////////////////////////////////////////////////////////
dim RetValue as Variant
dim dmv as Variant
RetValue = "L" & Year(Date()) & "-"
dmv=
dMax("[NumeroContratto]";"TabellaContratti";"Mid([NumeroContratto];2;4)=" &
Year(Date()))
if  not isnull(dmv) then
    RetValue = RetValue & Format(Val(Right(dmv;4))+1;"0000")
else
    RetValue=RetValue & "0001"
endif
ProssimoNumeroContratto=RetValue
end function
Spero di esserti stato di aiuto
Ciao e buon lavoro
Antonio Misericordia
-- 
Posted from 
smtp3.libero.it
 [193.70.192.53] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

0010?
premesso che l'argomento è abbondantemente trattato sul sito comune,
per fare la seconda cosa che dici, che è la più semplice, puoi usare
un'espressione del genere:
right("0000" & n, 4)
dove n è una stringa che contiene il numero cui anteporre gli zeri.
per fare qualcosa di meno banale puoi scriverti una funzioncina che
generalizzi quanto sopra:
function Giustifica(s as string, c as string, n as integer) as string
' s è la stringa da "giustificare"
' c è il carattere da usare come giustificativo
' n è il numero di caratteri totale che la stringa deve avere
Giustifica = right(string(c, n) & s), n)
end function
ma in realtà questo non ti serve per il caso in questione, ti potrà
tornare comodo in seguito.
allora, tu hai questo campo fatto così:
L0000-nnnn
devi vedere qual è l'ultimo nnnn, cioè il più grande, e a questo
aggiungere 1.  poi puoi usare qualcosa tipo la funzione di cui sopra.
nnnn sono i quattro caratteri da destra, te li prendi con la funzione
right:  right(campo, 4)
per vedere qual è l'ultimo nnnn potresti usare la funzione dmax (ci
sono metodi più veloci ma meno semplici), che approfondirai sull'help:
dim ultimo as integer
dim nuovoultimo as string
ultimo = cint(dmax("right(NomeCampo, 4)", "NomeTabella"))
nuovoultimo = Giustifica(cstr(ultimo+1), "0", 4)
Campo = "L" & format(now, "yyyy") & "-" & nuovoultimo
--
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport


resto.
Per fare la stessa cosa io ci messo questa roba qua (sempre come
valore predefinito nelle proprieta'):
"cj" &
Format(Val(Right(DMax("[preventivo]";"preventivi");4))+1;"0000")
Per te sarebbe:
"L"&Year(Date())&"-"&format(val(right(dmax("[idcontratto]";"nometabellatua");4))+1;"0000")
dmax legge l'ultimo idcontratto
right ne estrae la stringa di 4 caratteri a destra
val trasforma questa in numero che puoi incrementare di 1
format ritrasforma il numero in stringa con gli zeri davanti


