PDA

Visualizza versione completa : Access 2003: Contatore


malena_visentin
24-04-2009, 09.38.27
Ciao forum, ho ancora bisogno di voi su di una cosa che non riesco a venirne a capo. Ho una maschera chiamata AssPra con 4 controlli che sono Protocollo, AssegnatarioPratica, NPI, Data.
I primi 3 controlli sono formattati come testo, mentre la Data come data estesa. In AssegnatarioPratica viene inserito la matricola dei dipendenti, nell'evento dopo aggiornamento di questo controllo ho inserito il seguente codice trovato sul sito comune:
Me!NPI="" & Format(IIf(IsNull(DMax("[NPI]","[TabellaPratiche]","[NPI] like '???/" & Format(Date(),"aaaa") & "'")),1,Mid(DMax("[NPI]","[TabellaPratiche]","[NPI] like '???/" & Format(Date(),"aaaa") & "'"); 1,3)+1),"000") & "/" & Format(Date(),"aaaa")

In questo modo ottengo un contatore del tipo 001/2009

Quello che vi vorrei chiedere è come posso fare per inserire in questo codice il contenuto che si trova nel controllo AssegnatarioPratica? Dovrei riuscire ad ottenere una cosa del tipo:
AssegnatarioPrtica=pippo
NPI=pippo - 001/2009
paperino - 001/2009
pippo - 002/2009
In rete a dire il vero, ho trovato un esempio con un Select Case, ma siccome sono circa 30 assegnatari non vorrei fare 30 select case.
Spero di essere stata chiara e di ricevere, come sempre, il vostro aiuto.

miciomao
24-04-2009, 12.17.22
Dai che questa è facile facile :)

Come fai a fare una concatenazione da 2 o + controlli ?

Esempio:

Me!NPI=[A] & " - " & [B]

Dove sono A e B nel tuo form?

Ciao
Alex

malena_visentin
24-04-2009, 13.08.41
Ciao Alex, purtroppo non è facile come credi. Non devo fare una semplice concatenazione, altrimenti il contatore segue la numerazione con qualsiasi nome che immetto. Ti ripeto, devo fare in modo che se in AssegnatarioPratica inserisco Pippo deve contare per quel determinato nome. Forse non mi sono spiegata bene.

miciomao
24-04-2009, 13.29.55
tu in pratica vuoi un contatore distinto per ogni AssegnatarioPratica?

malena_visentin
24-04-2009, 13.33.25
bravo Alex, almeno sono riuscita a farmi capire. vorrei che venisse generato un contatore distinto per ogn nome inserito nel campo assegnatariopratica. Per esempio:
Pippo - 001/2009
Pippo - 002/2009
Pluto - 001/2009
Pippo - 003/2009
Il codice che ho postato l'ho capito come funziona, so che devo agire sulla DMax, ma non riesco :-(

miciomao
24-04-2009, 15.30.20
Così dovrebbe andare, ti ho aggiundo un check per evitare che il contatore vada avanti nel caso volessi modificare il valore di AssegnatarioPratica



If IsNull(Me.NPI) Or Len(Trim(Me.NPI)) < 1 Then
Me.NPI = "" & Format(IIf(IsNull(DMax("[NPI]", "[TabellaPratiche]", "[NPI] like '???/" & Year(Now) & "' And [AssegnatarioPratica]='" & Me.AssegnatarioPratica & "'")), 1, Mid(DMax("[NPI]", "[TabellaPratiche]", "[NPI] Like '???/" & Year(Now) & "' And [AssegnatarioPratica]='" & Me.AssegnatarioPratica & "'"), 1, 3) + 1), "000") & "/" & Year(Now)
End If


Ciao
Alex

malena_visentin
24-04-2009, 19.13.19
Grandioso Alex, diciamo che funziona al 50%, nel senso che per ogni nome c'è un contatore. L'unico problema è che non si vede il nome al fianco del numero, tipo pippo - 001/2009, nell'esempio che mi hai gentilmente proposto mi esce solo 001/2009. Comunque ancora infinitamente grazie per il tuo prezioso aiuto.

miciomao
28-04-2009, 11.48.26
Considera che non ha senso dato che rimane giusto avere 2 campi uno che identifichi assegnatariopratica e uno NPI contatore, puoi concatenarli quando vuoi e non è necessario contaminare quel campo con altre menate, il giorno che ti servirà solo in numero e l'anno cosa dovrai inventare per estrarlo?

ti basterà fare

Me.AssegnatarioPratica & " - " & me.NPI

Cmq se proprio vuoi.....


If IsNull(Me.NPI) Or Len(Trim(Me.NPI)) < 1 Then
Me.NPI = Me.AssegnatarioPratica & " - " & Format(IIf(IsNull(DMax("[NPI]", "[TabellaPratiche]", "[NPI] like '???/" & Year(Now) & "' And [AssegnatarioPratica]='" & Me.AssegnatarioPratica & "'")), 1, Mid(DMax("[NPI]", "[TabellaPratiche]", "[NPI] Like '???/" & Year(Now) & "' And [AssegnatarioPratica]='" & Me.AssegnatarioPratica & "'"), 1, 3) + 1), "000") & "/" & Year(Now)
End If


Ciao
Alex