Newsgroup: it.comp.appl.access
Titolo: inizializzare numerazione record

Ho questo problema.
Ho un database in access con record relativi all'anno 2003.
Tali record, tramite una routine VBA vengono contati, implementati di +1 e
numerati nella seguente maniera:
A3001
A3002
A3003
A3004
...
Quest'anno i nuovi record devono essere numerati in maniera diversa ma
partendo sempre dal primo numero, senza perdere logicamente quelli degli
anni precedenti.
Quindi:
A4001
A4002
A4003
A4004
...
Come posso utilizzare lo stesso database, ripartire ogni anno con
numerazioni nuove (come sopra) e mantenere i vecchi record?
Grazie,
Furo
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 numerazioni nuove (come sopra) e mantenere i vecchi record?
sul sito comune c'č un esempio per la numerazione personalizzata con cambio
anno.
Devi modificarla leggermente andando a ragionare su right(codice,4)
Antonio

Egregio Antonio,
Sei veramente gentilissimo. Dopo trovo il sito comune e che parole chiavi
inserisco per trovare tale esempio?
Grazie, Furo.

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


La parte inziale sarà "A"& year(date)-2000. (Per i prossimi 996 anni può
andare bene...). Poi prosegui tu, con la tua routine.
Ciao
Salvatore

Grazie Antonio e Salvatore,
Ho trovato l'esempio nel sito comune. Dovrebbe trattarsi di questa routine:
="E" & Format(Date();"aa") & "/" &
Format(IIf(IsNull(DMax("MioContatore";"MiaTabella";"MioContatore like '?" &
Format(Date();"aa") &
"/????'"));1;Right(DMax("MioContatore";"MiaTabella";"MioContatore like '?" &
Format(Date();"aa") & "/????'");4)+1);"0000")
E' indicato che tale espressione si inserisce come ValorePredefinito del
controllo.
Di che controllo parliamo?
Ho inserito tale espressione pari pari in Generale - valore predefinito di
un Nome campo che fa parte di una tabella ma mi dà errore.
Ho sbagliato qualche cosa?
Scusate la mia ingnoranza.
Grazie, Furo
PS: per Salvatore.
Scusami ma non ho capito il tuo esempio.

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Grazie, Furo.
Anche tu bevi solo caffè? Cioè è una tradizione di famiglia?
MAssimiliano



Antonio,
Ho provato l'esempio che mi hai suggerito.
Da solo funziona. Purtroppo quando il programma viene usato dall'ufficio (+
utenti) c'è conflitto tra i records.
Ho già creato il file MDW per gli utenti.
Come posso fare affinchè un record appena creato sia subito registrato nel
database cosicchè gli altri utenti trovano i numeri successivi disponibili?
Furo


 database cosicchè gli altri utenti trovano i numeri successivi
disponibili?
La creazione del codice deve essere fatta solo al momento del salvataggio
del record. Creati un pulsante di salvataggio che salva il record e crea il
codice
Antonio


Ho provato con questa stringa e funziona.
IDProva = "A3" & Format(Nz(DCount("*", "DettagliProva")) + 1, "000")
dove quel 3 indica l'anno 2003.
Il problema nasce nel momento in cui voglio riferire nuovi record all'anno
2004.
Tali dovrebbero ripartire dal primo cioè A4001, A4002, etc senza perdere i
record degli anni precedenti.
Come faccio riferirli sempre all'anno in corso?
FURO


 Come faccio riferirli sempre all'anno in corso?
year(Date) ti restituisce l'anno corrente (dalla data di sistema)
Antonio


Forse non riesco a spiegarmi.
Mi scuso per questo.
La stringa indicata sopra consente di contare record da un database e di
aggiungerne uno di nuovo secondo la numerazione gią vista.
Se ad esempio al 31.12.2003 sono arrivato al record A3045 come faccio a
ripartire al 01.01.04 dallo stesso database con A4001 (senza perdere i
record precedenti)?
Questo problema mi si ripresenterebbe nel 2005, nel 2006,...
Grazie,Furo


 record precedenti)?
Ogni volta che devi generare un codice devi testare l'anno corrente. Se
l'ultima cifra dell'anno è diversa dalla seconda del Dmax dei codici, dovrai
ripartire da capo, altrimenti incrementi al solito di uno.
Ovvio che questo tipo di codifica, scelta da te, andrà bene solo fino al
2009...
Antonio


Sono disperato ed esausto.
Non riesco proprio a farlo funzionare.
Chiedo ad Antonio oppure a Namor di aiutarmi, di scrivermi la procedura per
vincolare il conteggio dei record con l'anno corrente.
Si dovrebbe partire con la stringa che ho indicato io in quanto funziona
perfettamente nel caso di multiutenza.
Vi sarei molto grato.
Grazie, Furo.


Furo ha scritto:


Non ho seguito tutto il discorso, ma se posti la tua formula che non
funziona, per far vedere che almeno ci hai provato, magari il buon B ti
aiuta a correggerla...
(non è cattivo, se al prox raduno avrai occasione di dargli una leccatina
scoprirai che è dolce dolce!)
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


La formula è questa
IDNumeroOfferta = "A3-" & Format(Nz(DCount("*", "DettagliOfferta")) + 1,
"000")
Dovrebbe ricordar_ti qualcosa.
Ora, partendo da questa stringa che funziona alla grande in un ambiente
multiutente, come faccio a far ripartire il conteggio dei record da A4-001
vincolandolo con l'anno corrente 2004 mantenendo nel medesimo data base i
record esistenti riferiti all'anno 2003 (A3-001, A3-002 ; A3-045)?
Furo
PS: voglio proprio pensare che B sia buono...


 PS: voglio proprio pensare che B sia buono...
La stringa fissa "A3-" ovviamente non va bene, deve essere creata in base
all'anno. Come si fa? Si prende l'ultimo carattere dell'anno con right():
right(year(date());1). Quindi "A" & right(...) & "-"
Il Dcount dovrà considerare solo i codici dell'anno in corso, non tutti,
altrimenti prenderebbe l'ultimo dell'anno precedente. Come si fa? Gli si
aggiunge un criterio per dirgli di contare solo i codici che cominciano
per "A" e il numero dell'anno, sempre calcolato con right: "codice like
""A"" & right(year(date());1) & ""*"""
Non so se la sintassi è esattissima, non l'ho provata, casomai controlla i
doppi apici.
E come già diceva il buon B, utilizzando un solo carattere per indicare
l'anno questa codifica è soggetta al "2010 millennium bug".



Ho provato in questo modo ma non funziona.
Select Case Right(Year(Date), 2) 'cosi risolvo il "2010 millennium bug".
Case 04 'riferito all'anno corrente
IDNumeroOfferta = "A" & Right(Year(Date), 2) & "-" & Format(Nz(DCount("A4",
"DettagliOfferta")) + 1, "000")
Case 05
...
End Select
Mi potresti dare la dritta finale?
Furo


 Furo
Se decidi di usare l'anno a due cifre (04 invece che 4, 05 invece che 5...)
devi tenerne conto anche nelle altre funzioni della formula. Per esempio
nella Dcount il criterio non dovrà più essere like "A4*" ma like "A04*" (o
left(codice;3)="A04", se non vuoi usare il like).
E nelle funzioni di aggregazione come dcount, il criterio non va messo come
primo parametro ma come terzo. Andava bene com'era scritta prima, bastava
aggiungere una virgola e il criterio alla fine.
dcount("nomecampo"," nometabella", "criterio")
Namor


Ho provato con questa stringa (riferito all'anno con 1 cifra) ma non
funziona.
Ti sarei grato se potessi testarla e farmi sapere:
IDNumeroOfferta = "A" & Right(Year(Date), 1) & "-" &
Format(Nz(DCount("IDNumeroOfferta", "DettagliOfferta", "A4*")) + 1, "000")
Mi dice "Errore di sintassi (operatore mancante) nell'espressione della
query 'A4*'


 query 'A4*'
E infatti manca l'operatore. Non basta "A4*" come criterio, devi usare
"IDNumeroOfferta like ""A4*""". Il resto mi pare vada bene, anche se non
l'ho provato.
L'uso del Dcount() funziona finchè la numerazione è progressiva, senza
buchi e con inizio da 001. Se per qualche motivo dovesse esserci un codice
mancante, quella formula restituirebbe un codice già esistente. Per
evitarlo potresti usare DMax() al posto di DCount().


 E infatti manca l'operatore. Non basta "A4*" come criterio, devi usare
San Namor...
Antonio


Evviva, funziona.
Grazie, Furo


 Antonio
Oggi è il mio compleanno, e mi sento ancora più buono del solito!



Auguri
Ciao Daniele

 Ciao Daniele
