Newsgroup: it.comp.appl.access
Titolo: Contatore in base all'Anno

Contatore in base all' Anno
E' possibile avere sempre sullo stesso campo un contatore
che è legato all' Anno
Campi Tabella:
Anno
Contatore
Titolo Rivista
Note
Normalmente, senza l' anno, all'inserimento del titolo si attiva il
contatore
a partire da 1 e in maniera progressiva.
è possibile che il contatore riparta da 1 quando ho un anno diverso
ho provato con masch e sottomaschera ma è sempre progressivo


Sito Comune, leggiti la faq sui contatori
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------


Io faccio così, vedi se ti può andar bene.
Option Compare Database
Option Explicit
' La funzione richiede i seguenti parametri:
' tbl: tabella dove accodare il nuovo ID
' fld: campo dove inserire il nuovo ID, sintassi [NomeCampo].
' La funzione dà la possibilità di partire con un ID arbitrario
' che verrà utilizzato nel caso non sia presente alcun valore in tabella,
' Tale ID andrà archiviato in una tabella che chiamo TAB e che sarà
' del tipo: [IDParametro], [Descrizione] (facoltativo), [Valore].
' Pertanto, per potere eseguire quanto detto, la funzione necessita
' di questi altri parametri:
' def_tbl: il nome della tabella TAB
' def_fld: il nome del campo Valore, sintassi: [NomeCampo]
' def_fldID: il nome del campo IDParametro, sintassi: [NomeCampo]
' def_fldIDVal: il valore contenuto nel campo IDParametro da utilizzare come
criterio
Function NuovoID(tbl, fld, def_tbl, def_fld, def_fldID, def_fldIDVal As
String) As String
On Error GoTo Err_NuovoID
Dim maxCorrente As String
Dim maxProgrCorrente As String
Dim annoSistema As String
Dim maxAnnoPratica As String
Dim progressivo As String
Dim nuovoProgressivo As String
maxCorrente = DMax(fld, tbl)
maxProgrCorrente = Right(maxCorrente, 4)
annoSistema = Format(Now(), "yyyy")
maxAnnoPratica = Left(maxCorrente, 4)
If maxProgrCorrente = 9999 Then
    MsgBox "E' stato superato il limete massimo di Records per quest'Anno:
Passare all'anno successivo!"
    GoTo Exit_NuovoID
Else
    If annoSistema = maxAnnoPratica Then
        progressivo = CStr(CInt(maxProgrCorrente) + 1)
    Else
        progressivo = "0001"
    End If
End If
nuovoProgressivo = Right("000" & progressivo, 4)
NuovoID = Chr(34) & annoSistema & "/" & nuovoProgressivo & Chr(34)
Exit_NuovoID:
    Exit Function
Err_NuovoID:
    If Err.Number = 94 Then 'Se non trova alcun valore su cui operare DMax,
imposta il valore predefinito
        NuovoID = Chr(34) & DLookup(def_fld, def_tbl, def_fldID & "='" &
def_fldIDVal & "'") & Chr(34)
        Exit Function
    Else
    MsgBox Err.Description & "( Errore numero " & Err.Number & ")"
        Resume Exit_NuovoID
    End If
End Function
P.S.  Lo spunto iniziale lo presi qualche anno fa sul sito comune pertanto
segui il consiglio
        di Federico Luciani: dacci comunque un'occhiata.
Ciao.

non riesco a collegarmi al sito comune
Forbidden
You don't have permission to access /i/t/it_db_access/ on this server.
ci sono problemi?
inoltre per la soluzione di rob non so se vada bene, mi sembra molto
articolata.
eventualmente dove va inserita la funzione
devo approfondire l'analisi del codice,ma (n.b. ad intuiti il dmax non
dovrebbe servirmi)
praticamente io devo
in tabella
anno       Id
2000       1
2000       2
2000       3
2001       1
2001       2
2001       3
2001       4
2002       1
2003       1
2003       2
n.b. io messo tutti numeri consecutivi per l'id però preciso che si
tratta di un contatore (e quindi mi serve per identificare in modo
univoco il record e non di unanumerazione progressiva) quindi l'esempio
è riferito al caso in cui io non ho cancellato alcun record.
sottolineo che l'ID non è che deve avere un limite ma deve solo
dipendere dal campo anno
anche se poi in realtà viene scritto su un unico campo
Dico ciò perchè (se non erro) nel codice di rob dovrebbe esserci una
limitazione al numero max di ID.
Thank you

 ci sono problemi?
sono in attesa di risposte dal webmaster di xoom :-(
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net


 Thank you
Prego.