Newsgroup: it.comp.appl.access
Titolo: intercettare ultimi caratteri

Ciao a tutti, il mio problema è questo:
Devo inserire in un db  molti nominativi che spesso sono duplicati in
quanto per motivi che non sto a spiegare i nomi vengono "tagliati" alla
5 lettera, per la distinzione ho adottato un metodo che all'inizio non
essendoci molti record andava benissimo , alla fine del nome aggiungevo
un numero per distinguerli (es. Rossi00, rossi01 etc).
Ora pero' i nominativi sono molti ed io per non perdere troppo tempo
vorrei che nel momento in cui viene acquisito il nome dopo la 5 lettera
venisse letto il database, intercettati i nominativi uguali e inserito
in automatico il primo numero libero anche se questo ( a causa di
precedenti cancellazioni) fosse intermedio.
Esempio
tabella_nomi
rossi00
rossi01
rossi02
rossi04
rossi05
in questo caso vorrei inserire una subroutine onkeyup, in modo che dopo
avere scritto rossi, in automatico comparisse il numero 03.
Si puo' fare?
Grazie a chi mi aiuterà.
Cristina.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Cristina.
sicuramente si può fare, su modifica del campo cognome conti i caratteri
if len (cognome)=5 then
    assegna_numero
endif
poi puoi creare una query che nei criteri cognome contiene
Like nz([forms]![tuaform]![cognome];"*")
conti i record della query
dim i
i=dcount("id","[nometuaquery]")
e assegni al cognome quanto segue
cognome=cognome & format$(i+1,"00")
questo però non considera le cancellazioni, per quello diventa un po
laborioso e non riesco a fartelo cosi rapidamente....
fammi sapere com'è andata....

 ha scritto nel messaggio
news:614478e1c135ab65a2e...@mygate.mailgate.org...

Ricuperare i buchi è un po' più complicato, ma se ti sta bene che il nuovo
rossi sia rossi06 prova così.
Se la tabella che contiene i dati si chiama tabella_nomi.
Se il campo che contiene i nomi "tagliati" si chiama NomeCorto.
Se la casella di testo associata al campo NomeCorto si chiama anche lei
NomeCorto.
A fronte dell'evento "Dopo aggiornamento" della casella di testo NomeCorto
genera il seguente codice VBA:
Private Sub NomeCorto_AfterUpdate()
If DCount("*", "Tabella1", _
"Left(NomeCorto, IIf(Len(NomeCorto)<7, " & _
"Len(NomeCorto)-2, 5)) =" & Chr$(34) & _
Left(Me!NomeCorto, IIf(Len(Me!NomeCorto) < 5, _
Len(Me!NomeCorto), 5)) & Chr$(34)) = 0 Then
    Me!NomeCorto = Left(Me!NomeCorto, _
    IIf(Len(Me!NomeCorto) < 5, _
    Len(Me!NomeCorto), 5)) & "00"
Else
    Me!NomeCorto = Left(Me!NomeCorto, _
    IIf(Len(Me!NomeCorto) < 5, Len(Me!NomeCorto), 5)) & _
    Format(Val(DMax("Right(NomeCorto, 2)", "Tabella1", _
    "Left(NomeCorto,IIf(Len(NomeCorto)<7, " & _
    "Len(NomeCorto)-2, 5))=" & Chr$(34) & _
    Left(Me!NomeCorto, IIf(Len(NomeCorto) < 5, _
    Len(NomeCorto), 5)) & Chr$(34))) + 1, "00")
End If
End Sub
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

Ho provato entrambe le soluzioni ( ammetto che per una principiante come
me
la seconda ha dato del filo da torcere :-) ). Funzionano ma il mio
problema
sono proprio quei famosi "buchi".
Non so dove sbattere la testa, se avete tempo e voglia mi fareste
davvero
un gran regalo !
Ciaooooooo e grazie comunque della risposte.


 sono proprio quei famosi "buchi".
domanda "sciocca" ma a cosa ti serve quel codice di 5 caratteri?
--
a.cara 
Togli qualcosa dall'email

 un gran regalo !
E va beh, per 'sta volta famo 'sto regalo. :-)
Fermo restando i presupposti del mio messaggio precedente, a fronte
dell'evento "Dopo aggiornamento" della casella di testo NomeCorto prova a
generare il seguente codice VBA:
Private Sub NomeCorto_AfterUpdate()
Dim rst As DAO.Recordset
Dim Conta As Integer
Set rst = Me.RecordsetClone
rst.FindFirst "Left(NomeCorto, " & _
"Len(NomeCorto)-2) =" & Chr$(34) & _
Left(Me!NomeCorto, 5) & Chr$(34)
If rst.NoMatch Then
Me!NomeCorto = Left(Me!NomeCorto, 5) & "00"
Else
For Conta = 0 To 99
    rst.FindFirst "NomeCorto =" & _
    Chr$(34) & Left(Me!NomeCorto, 5) & _
    Format(Conta, "00") & Chr$(34)
    If rst.NoMatch Then
        Me!NomeCorto = Left(Me!NomeCorto, 5) _
        & Format(Conta, "00")
        Exit For
    End If
Next Conta
End If
Set rst = Nothing
End Sub
Come avrai notato la routine di cui sopra fa riferimento alla libreria
Microsoft DAO quindi, se usi una versione di Access successiva ad Access 97,
aggiungi ai riferimenti del tuo database tale libreria.
-- 
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------


> E va beh, per 'sta volta famo 'sto regalo. :-)
Prima di tutto grazie del regalo :-).
Secondo, mi vergogno a dirlo, non sono arrivata alla soluzione.
Forse sono ancora troppo ignorante, ma ti assicuro che mi sto
impegnando.
Ho generato il codice che mi hai scritto, quando sono andata 
a personalizzarlo pero' non sono riuscita a identificare il punto in cui
indico la tabella contente il campo da controllare.
Sii sincero = è meglio che mi dia all'ippica ?????
Io attendo fiduciosa, non sarà natale ma un secondo regalo "
chettecosta?".
Scherzo ovviamente, se hai tempo io sono qui pronta a leggere, copiare,
ma soprattutto ad imparare.
Ciao ciao


 Ciao ciao


Nell'attesa della tua risposta ho fatto un tentativo 
proprio in quel senso, ora tutto funziona ed io ho 
due certezze in piu' :
1) Aspetto ad iscrivermi al maneggio  :-)
2) Sei paziente e gentile, grazie davvero.
