Newsgroup: it.comp.appl.access
Titolo: incrementare campo a sinistra diun carattere

Ciao a tutti,
anche se per qualcuno di voi possa sembrare abbastanza banale
ho un campo chiamato [numero] formato testo::
456/AZ
3214/BCF
Ecco, vorrei poter incrementare di una unit� (+1) la parte con i caratteri 
numerici
Cio� prendere la parte a sinistra del carattere "/" convertirlo in numerico 
ed incrementarlo di 1
Mi sembra che si possa fare con le funzioni Left, Mid, Instr e DCount ma non 
so come impostare il tutto!
Grazie per l'aiuto
Toni 

 Toni
Ciao Tony,
innazitutto parliamo di Access ?
cosa vuoi fare una query su dati esistenti ?
devi farlo nella maschera all'atto di inserimento dati ?
cosa intendi per convertirlo in numerico?
Con quale regola di conversione e/o di icremento ?
(Mi sembra sia stato un pò troppo criptico)
Ciao
Alberto

 Toni
Ciao Tony,
innazitutto parliamo di Access ?
cosa vuoi fare una query su dati esistenti ?
devi farlo nella maschera all'atto di inserimento dati ?
cosa intendi per convertirlo in numerico?
Con quale regola di conversione e/o di icremento ?
(Mi sembra sia stato un p� troppo criptico)
Ciao
Alberto
Ciao Alberto,
Scusa, cerco di essere pi� chiaro
in una maschera dopo il click di un punsalte, voglio prendere l'ultimo dato
inserito in una casella di testo associata al campo [numero] del record 
precedente
e incrementare di 1 la parte a sinistra del carattere "/"
esempio:
record precedente
3218/GKL
e inserire dopo il click sull'attuale record nuovo
3219/GKL

 ha scritto nel messaggio 
news:m1nEm.84000$1s6....@twister2.libero.it...

Ciao Tony,
fanno al caso tuo le funzioni "instr", "left", "mid", "val" e "str". 
Procediamo in ordine.
Per vedere dove sta la barra, puoi fare cos�:
    dim I as integer
    I = instr (Controllo,"/")
in questo modi I conterr� zero se la barra non � stata trovata, oppure il 
numero corrispondente alla posizione: nel tuo esempio dovrebbe contenere 5 
(ovvero la barra � alla quinta posizione).
A questo punto, se I � maggiore di 0, possiamo effettuare l'incremento:
    if I > 0 then
        dim AreaSx as string, AreaDx as string
        AreaSx = left (Controllo, I - 1)
        AreaDx = mid (Controllo, I)
        AreaSx = str (val (AreaSx) + 1)
        me.Controllo = mid (AreaSx,2) & AreaDx
    end if
Il mid che ho usato nell'ultima istruzione elimina lo spazio iniziale che ha 
lasciato la funzione str. Le funzioni left, mid e str le puoi anche scrivere 
col carattere $ alla fine, cos�: left$, mid$, str$. In questo modo la 
funzione si predispone a trattare campi string e non variant.
Ciao
Antonio

 3219/GKL
Ciao Toni, io farei così:
1) dichiara in un modulo globale la variabile UltimoNumero (intero) .
Se la maschera è unica la puoi dichiarare anche nella maschera stessa
2) sull'evento dopo inserimento della maschera: UltimoNumero = left
([numero] ,instr([numero] ,"/")-1)          così memorizzi l'ultimo
numero
poi passi a nuovo record
3) sull'evento Click del pulsante:
      if me.newrecord=true
then                                                     'se sei in un
nuovo record
      [numero] = str(UltimoNumero+1) &  right([numero],4)
'componi la nuova stringa con la parte numerica incrementata
 
'presupponendo che la parte finale sia sempre di 3 caratteri + la
barra
      end if
(l' if serve solo se devi fare questa operazione in fase di immissione
di un nuovo record)
Fammi sapere se va bene. Se no correggiamo.
Ciao
Alberto

 3219/GKL
Ciao Toni, io farei così:
1) dichiara in un modulo globale la variabile UltimoNumero (intero) .
Se la maschera è unica la puoi dichiarare anche nella maschera stessa
2) sull'evento dopo inserimento della maschera: UltimoNumero = left
([numero] ,instr([numero] ,"/")-1)          così memorizzi l'ultimo
numero
poi passi a nuovo record
3) sull'evento Click del pulsante:
      if me.newrecord=true
then                                                     'se sei in un
nuovo record
      [numero] = Ltrim(Str(UltimoNumero+1)) &  Right([numero],4)
'componi la nuova stringa con la parte numerica incrementata
 
'presupponendo che la parte finale sia sempre di 3 caratteri + la
barra
      end if
(l' if serve solo se devi fare questa operazione in fase di immissione
di un nuovo record)
Fammi sapere se va bene. Se no correggiamo.
Ciao
Alberto
Per Antonio,
sbaglio o non ai tenuto conto del valore del record precedente ?
Ciao

Scusami ma ho visto che la mia formattazione del testo è andata a
pallino.
Vediamo se ora è più leggibile
Ciao Toni, io farei così:
1) dichiara in un modulo globale la variabile UltimoNumero (intero) .
   Se la maschera è unica la puoi dichiarare anche nella maschera
stessa
2) sull'evento dopo inserimento della maschera:
    UltimoNumero = left([numero] ,instr([numero] ,"/")-1)


 Toni
Ciao Toni, ho implementato il suggerimento di Antonio che fa al caso
tuo.
Sul clic di un pulsante inserisci:
Dim I As Integer
    Dim x As String
    DoCmd.GoToRecord , , acLast
    x = Me.Numero
    DoCmd.GoToRecord , , acNext
    I = InStr(x, "/")
    If I > 0 Then
        Dim AreaSx As String, AreaDx As String
        AreaSx = Left(x, I - 1)
        AreaDx = Mid(x, I)
        AreaSx = Str(Val(AreaSx) + 1)
        x = Mid(AreaSx, 2) & AreaDx
        Me.Numero = x
    End If
Ciao Vladimiro