Newsgroup: it.comp.appl.access
Titolo: Controllo ultimo numero del contatore...

Salve a tutti,
il mio problema odierno è il seguente:
data una tblProdotti, nella quale i prodotti hanno un campo "Rif" (che è poi 
la chiave della tabella, quindi senza possibilità di duplicati) composta da 
una lettera, una barra e un numero, del tipo cioè C/1505, A/4598, ecc....
tale campo è il codice che mi occorre per identificare il prodotto e deve 
avere le seguenti caratteristiche: la lettera deriva dal tipo, quindi quella 
la inserisco sempre io, il numero deve essere quello successivo all'ultimo 
inserito per quella lettera.
Es. se fino ad oggi avevo per la lettera C/ 1456 prodotti, il prossimo C/ 
dovrà essere 1457 e così via..
Il problema ora è che nella maschera di inserimento dei prodotti, ogni volta 
devo andare a controllare, tramite un filtro maschera ed un ordinamento, 
quale sia l'ultimo prodotto inserito per quella particolare lettera, tenerlo 
a mente, e di conseguenza inserire quello successivo.
Vorrei inserire un controllo nella maschera, o più di uno (uno per ogni 
lettera forse), che mi faccia vedere in ogni momento l'ultimo 
record/prodotto inserito per quel tipo.
Una cosa del tipo: casella non associata, che fa un controllo nella 
tblprodotti e mi restituisce il "Rif" dell'ultimo record per la singola 
lettera;
Vi sarei grato se, come sempre, mi aiutaste!
Raffi 


Sull'afterupdate del controllo che calcola la "lettera" non potrebbe 
essere sufficiente un:
NumeroArt = val(mid(dmax("codiceart","tabart","left(codiceart,1)='" & 
lettera "'"),2)+1)
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:hA80k.65115$o06....@tornado.fastwebnet.it...

Forse si....ma non ho ben capito!!! allora, se vado sull'afterupdate, vuol 
dire che prima devo inserire qualcosa in quel campo....e se non so cosa 
inserire..cosa ci metto????  e poi, questa formula calcola da sola il numero 
in base alla lettera che metto??
cioè, apro la maschera di inserimento, il cursore è sul campo [Rif] e appena 
scrivo ad esempio "A/" lui in automatico mi inserisce il numero seguente 
all'ultimo record già inserito per A/???
Perfetto se è così...ma spiegami meglio come fare..per favore! 


Uhmmm..... se il controllo e' unico forse e' meglio l'evento di change.
Mi sembrava, erroneamente, che i valori sul form fossero in due 
controlli distinti. O meglio dicevi che la lettera la decidi in base ad 
un altro controllo. Se e' questa la situazione ed il calcolo della 
lettera e' automatico allora e valida la after update per "quel" 
controllo con una piccola aggiunta
if "" & CodiceArt="" then
CodiceArt= lettera & "/" & 
val(mid(dmax("codiceart","tabart","left(codiceart,1)='" &
lettera "'"),2)+1)
endif
se invece la lettera la immetti tu su evento di change del controllo 
CodiceArt:
if len("" & CodiceArt.text) = 1 then
   codiceart.text = codiceart.text & "/" & 
val(mid(dmax("codiceart","tabart","left(codiceart,1)='" &
codiceart.text & "'"),2)+1)
endif
Yes, la istruzione dovrebbe fare tutto quello che hai detto.
NB: Questa soluzione in caso di multiaccesso non e' affidabile.
-- 
ac
y-1=x


ps sorry:
val(mid(dmax("codiceart","tabart","left(codiceart,1)='" &
codiceart.text & "'"),3)+1)
Mi ero dimenticata la slash. Comunque non la ho provata e quindi non so 
se ci sono errori di sintassi.
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:67a0k.65197$o06....@tornado.fastwebnet.it...

Mi da tutto il testo in rosso e soprattutto, anche dopo le opportune 
modifiche, mi lascia tutto rosso in particolare le & e dove ci sono le ""
per esattezza io ho scritto questa routine du evento modifica del campo Rif:
Private Sub Rif_Change()
If Len("" & Rif.Text) = 1 Then
Rif.text = Rif.Text & "/" &
val(mid(dmax("Rif","Prodotti","left([Rif],1)='" &
Rif.text & "'"),2)+1)
End If
End Sub
ma è tutto rosso e non funziona!! 


certo che non funziona
Rif.text = Rif.Text & "/" &
val(mid(dmax("Rif","Prodotti","left([Rif],1)='" &
Rif.text & "'"),3)+1)
queste tre dovrebbero stare su una riga sola oppure:
Rif.text = Rif.Text & "/" & _
val(mid(dmax("Rif","Prodotti","left([Rif],1)='" & _
Rif.text & "'"),3)+1)
Il "rosso" indica errore di sintassi.
Sarebbe bene che ti guardassi le regole sintattiche del vba.
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:BBa0k.65217$o06....@tornado.fastwebnet.it...

In effetti ho un bel po' di problemi con la sintassi VB ma.....non 
funziona!!
Allora...ho riscritto tutto su un rigo e non c'è più nulla di rosso, ma 
quando inserisco la prima lettera nel campo Rif, mi da un errore di debug e 
la riga della routine è gialla!
Forse però dipende da una mia omissione.... alcuni record hanno due lettere 
anzichè una... cioè si presentano nella forma AF/1550 invece che A/1550, o 
sarebbe meglio dire che esiste sia la A/... che la AF/..... si può ancora 
risolvere??
Grazie ancora! 

 risolvere??
Si si puo' risolvere solo che dovrai scrivere 2(due caratteri) e fare un 
test aggiuntivo
dim nLett as long
if len("" & Rif.Text) = 2  then
	nLett = iif(right(Rif.Text,1)="/",1,2)
	Rif.text = Rif.Text & "/" & val(mid(dmax("Rif","Prodotti", 
"left([Rif],nLett)='" & Rif.text & "'"),nLett+2)+1)
end if
E speriamo non ci siano altri conigli.
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:JOc0k.65345$o06....@tornado.fastwebnet.it...

Conigli??!?!?!?
Io ti ringrazio enormemente.....soprattutto per la pazienza ma....non 
funziona!!
La routine si presenta così:
Private Sub Rif_Change()
Dim nLett As Long
If Len("" & Rif.Text) = 2 Then
nLett = IIf(Right(Rif.Text, 1) = "/", 1, 2)
Rif.Text = Rif.Text & "/" & Val(Mid(DMax("Rif", "Prodotti", 
"left([Rif],nLett)='" & Rif.Text & "'"), nLett + 2) + 1)
End If
If Len("" & Rif.Text) = 1 Then
Rif.Text = Rif.Text & "/" & Val(Mid(DMax("Rif", "Prodotti", 
"left([Rif],1)='" & Rif.Text & "'"), 2) + 1)
End If
End Sub
e mi da errore di debug!!
anche se tolgo la seconda parte, quellla dell' If Len=1.... mi va sempre in 
errore... sia che scriva un carattere o due! 


la seconda parte non serve e sufficiente quello che avevo scritto io. 
Sono sempre in attesa di sapere che errore ti da. Numero + messaggio
dire che va in debug non basta. Che ci vada ci credo non e' che ho 
testato il tutto.
I conigli sono le cose inaspettate come il tuo carattere che da 1 passa a 2.
-- 
ac
y-1=x

 ha scritto nel messaggio 
news:uNe0k.65414$o06....@tornado.fastwebnet.it...

Allora... scrivendo solo la parte che mi hai detto tu, quando inserisco la
prima lettera non succede niente, ma quando inserisco la seconda appare il
seguente messaggio:
Errore di run-time '2001'
Operazione Precedente annullata
Un ultima cosa...quando dici che devo inserire due caratteri...non vuol mica
dire che ci devono essere SEMPRE 2 caratteri prima del "/" ???
Perchè altrimenti la cosa non va bene..io ho già circa 2000 record in quella
tabella ed il 90% ed oltre hanno un solo carattere prima del "/"!
Grazie ancora e..scusa per il ritardo!! :)
p.s. scusa..ma ho involontariamente mandato alla tua email anzichè al Ng la 
risposta!! 


La soluzione di Alessandro CARA potresti sfruttarla su evento keypress della
textbox interessata ecco il codice opportunamente modificato:
Private sub Rif_KeyPress(KeyAscii as integer)
Dim nLett As Long
If Chr(KeyAscii) <> "/" Then
    Exit Sub
Else
    KeyAscii = 0
    nLett = IIf(Len(rif.Text) = "1", 1, 2)
If nLett = 1 Then
   Rif.Text = rif.Text & "/" & Val(Nz(Mid(DMax("RIF", "prodotti", 
"left([Rif], " & nLett + 1 & ") = '" & Rif.Text & "/'"), nLett + 2), "0") + 
1)
Else
   Rif.Text = rif.Text & "/" & Val(Nz(Mid(DMax("RIF", "prodotti", 
"Left([Rif]," & nLett & ") = '" & Rif.Text & "'"), nLett + 2), "0") + 1)
End If
End If
end sub
P.S.: questa va solo se anteriormente allo "/" ci sono uno o due caratteri.
-- 
Ciao
Geppo

"Geppo" <c...@tin.it.invalid> ha scritto nel messaggio 
news:hxD1k.92204$FR.3...@twister1.libero.it...

Beh che dire....è perfetto!!!
Grazie a te, come sempre, ed anche ad Alessandro che si è tanto speso per 
questi miei "problemi"!!!
Grazie a tutti voi!
Post Chiuso.
p.s. ma non disperate...tra poco ci saranno altre mie richieste! :)