Newsgroup: it.comp.appl.access
Titolo: Come li divido?

Ho un campo, dove il record mi contiene sia il cap che la città:
es "00136 Roma"
come faccio a dividere il cap dalla città?
in Excel usavo la formula" =Destra((Cap)-4)"
ma in Access non ne ho la più pallida idea!!!
Ovviamente se non esporto i dati in Excel è perché sono oltre 1.500.000
record, il che è incompatibile con lo stesso.
Grazie 1000 Marco M.

ma in Access non ne ho la più pallida idea!!!
Se sei sicuro che sempre, dico sempre, i primi 5 caratteri della stringa sia
il cap allora fai
cap = left(tuastringa,5)
città = trim(mid(tuastringa,6))
Antonio
--
**************************
E' natale e siamo tutti più buoni
Figuriamoci se era pasqua
**************************

>in Excel usavo la formula" =Destra((Cap)-4)"
dai un'occhiata sull'help a left, mid e right.
-----------------------------------
Per favore, accodate due zeri al mio stipendio.  E' per renderlo Y2K-compliant.
-----------------------------------
togliete NOSPAM per rispondermi.
-----------------------------------
il sito comune di it.comp.database.access:
http://members.xoom.it/it_db_access

Grazie 1000 Marco M.
Metti questa routine nel codice di una maschera:
Private Sub DividiCampo()
 
    Dim s As String
    Dim s1 As String
    Dim s2 As String
    Dim str As String
 
    s = TUO_CAMPO_DA_DIVIDERE
    str = s
    EstraiNumeri str     'TI DA IL CAP
 
    s1 = CAP	
    s2 = ""
    SostituisciStringa s, s1, s2      'TI DA LA CITTà
End Sub
E queste due funzioni (scaricare dal  Sito Comune) in un modulo:
Public Function EstraiNumeri(str As String) As Double
 
   'Autore: Carlo Costarella
   'Estrae tutti i valori numerici da una stringa
   'Esempio: EstraiNumeri("A134B5") restituisce: 1345
 
   Dim Numero As Integer, NCompleto As String, NReale As Double
   Dim Pos As Integer, i As Integer, Lung As Integer
 
   'verifico la lunghezza della stringa
   Lung = Len(str)
    ' inizio un ciclo da 1 alla lunghezza della stringa
   For i = 1 To Lung
      Pos = i ' il valore della posizione di partenza (il primo carattere della
stringa)
      'Verifico se il carattere è un numero
      If IsNumeric(Mid(str, i, 1)) Then
         'è un numero...allora
         Numero = Mid(str, i, 1)
         ' la variabile stringa assume il valore della variabile + numero
         NCompleto = NCompleto & Numero
      End If
   Next i 'si sposta al carattere successivo
   'trasformo la stringa in numerico precisione doppia
   NReale = CDbl(NCompleto)
   ' assegno il valore alla funzione
 
    EstraiNumeri = NReale
 
    CAP = EstraiNumeri
End Function
Public Function SostituisciStringa(s As String, s1 As String, _
   s2 As String) As String
 
   'Autore: Lbo
   'esempio d'uso:
   'Sostituiscistringa("pippoAAApippoAAApippo", "pippo", "pluto")
   'restituisce: plutoAAAplutoAAApluto
 
    Dim start     As Long
    Dim appo      As String
    Dim appoLeft  As String
    Dim appoRight As String
    Dim p         As Long
 
    Dim Output As String
 
    p = 1
    appo = s
    Do Until InStr(p, appo, s1) = 0
        p = InStr(p, appo, s1)
        If p > 1 Then
            appoLeft = Left(appo, (p - 1))
        Else
            appoLeft = ""
        End If
        appoRight = Right(appo, Len(appo) - (Len(appoLeft) + Len(s1)))
        appo = appoLeft & s2 & appoRight
    Loop
 
    SostituisciStringa = appo
 
    CITTà = SostituisciStringa
 
End Function
Ciao,
Marco "TopGun"
Merry X-Mas and Happy Y2K!!!!!

Si ma dove applichi la formulina?
città = trim(mid(tuastringa,6)).......per tua stringa intendi il nome dela
casella di testo?
Forse in una casella di testo o magari in una query?
Grazie Marco M.

No non credo di aver capito dove applicare il tutto:
vediamo
allora sulla maschera "Indirizzi", dove si trova il famigerato Campo3
composto da Cap+Città non ci metto nulla sulle Routine.
Mentre nella stessa maschera inserisco in una Routine, quale, non so dopo
aggiornamento la funzione:
Private Sub Form_AfterUpdate()     <---------------non so se dico bene!!!!!!
    Dim s As String
    Dim s1 As String
    Dim s2 As String
    Dim str As String
    s = TUO_CAMPO_DA_DIVIDERE  <----------------------Campo3
    str = s
    EstraiNumeri str     'TI DA IL CAP  <----------------chi è?
    s1 = CAP
    s2 = ""
    SostituisciStringa s, s1, s2      'TI DA LA CITTà
End Sub
Poi rinomino una nuova casella di testo Cap,  e anche su questa non ci
inserisco nulla!!!!
Poi vado sui Moduli e metto la funzione pubblica che viene richiamata da
quella privata:




    EstraiNumeri = NReale
    CAP = EstraiNumeri
End Function
E' probabile che mi perda qualche passaggio ma a me non funziona, sapresti
dirmi dove sbaglio?
Grazie Mille
Marco M.

Forse in una casella di testo o magari in una query?
Se tu vuoi per esempio far comparire quei valori in altrettante caselle di
testo di una mashcera puoi eseguire il codice sostituendo città e cap con
nomi di controlli della maschera. Se vuoi ottenere questi valori in una
query per accodare magari tutto in una tabella scrivi le due formule in
altrettante colonne della query (diventeranno espr1 e espr2) e l'argomento
delle funzioni sarà un riferimento alla casella di testo di una maschera
aperta o il campo di una tabella dove è memorizzato quel valore


Marco M.
Se hai altri problemi chiedi pure, comunque penso che così ti dovrebbe
funzionare.
Ciao e Buon Natale,
Marco "TopGun"

>Si ma dove applichi la formulina?
boh, ad esempio in una query.  
apri l'editor delle query, ci carichi la tabella con il 1.500mila
record.  
in una casella ci scrivi left([nomecampo], 5), cioe' i primi cinque
caratteri da sinistra, e quello sara' il cap.
in un'altra ci scrivi right([nomecampo], len([nomecampo]-6), cioe'
partendo da destra prendi tutti i caratteri fino allo spazio che
separa il cap dal nome della localita'.
se ti serve creare proprio dei nuovi campi aggiungili in modo
struttura alla tabella e crea una query come sopra, solo di
aggiornamento.  il primo risultato lo usi per aggiornare il campo cap,
il secondo per il campo comune o localita' o come lo vuoi chiamare.
