Originariamente inviato da mschievano
Ciao a tutti!
Volevo chiedervi se avete qualche idea su come spacchettare una toponomastica completa inserita in un unica colonna(via - nomevia - civico - cap - città - provincia) su due colonne (1: via-nomevia-civico *** 2: cap-città-provincia) in codice vd access 2000
il problema sembra semplice, ma secondo me non lo è. Le stringhe possono avere infatti lunghezza diversa:
Via salvatore del gado 21/c 35100 Non so dove (BO)
P.zza Ciao snc 25145 Mha (PU)
i campi non hanno dei selettori utilizzabili (tipo virgole o cose del genere).
L'unica idea che mi è venuta in pseudocodice è che sapendo che l'unico numero certo è il cap è ha 5 cifre (il numero civico può essere 21/b o snc) dovrei fare un analisi della stringa a partire da destra verso sinistra, fino al primo codice numerico (ma il campo è tutto testo).
potete aiutarmi?

(dannazione a chi fa ste estrazioni...)
Sono riuscito parzialmente a risolvere il problema con questo codice:
codice:
Option Compare Database
Option Explicit
Public Function leggicolonna() As Variant
Dim dbs, cbs As Database
Dim rst, cst As Recordset
Dim strSQL, strSQL1, stroutta, indir, citt As String
' Restituisce il riferimento al database corrente.
Set dbs = CurrentDb
' imposta la SQL di selezione
strSQL = "SELECT * FROM sasReport"
stroutta = "SELECT * FROM uscita"
Set rst = dbs.OpenRecordset(strSQL)
Set cst = dbs.OpenRecordset(stroutta)
rst.MoveFirst
While Not rst.EOF
If Splitta(rst("indirizzo"), indir, citt) = True Then
'ok
cst.AddNew
cst.Fields(0) = rst("nome")
cst.Fields(1) = indir
cst.Fields(2) = citt
cst.Update
End If
rst.MoveNext
Wend
rst.Close
cst.Close
Set dbs = Nothing
End Function
------------
Function Splitta(strProblemAddress, indirizzo, citta As String) As Boolean
'Remember your error handling
Dim strResults, stringa As String
Dim iCounter As Integer
Dim iStartHere, SH, appoggio As Integer
iStartHere = 1
SH = iStartHere
Do While Not SH = Len(strProblemAddress)
stringa = Mid$(strProblemAddress, SH, 5)
If (IsNumeric(stringa) And Left(stringa, 1) <> " ") Then
Exit Do
Else
SH = SH + 1
End If
Loop
indirizzo = Left(strProblemAddress, SH - 1)
citta = Right(strProblemAddress, Len(strProblemAddress) - SH + 1)
FilterNumberOutOfAddress = True
End Function
Praticamente analizzo 5 caratteri della stinga partendo dall'inizio e spostandomi di 1 alla volta.
Ad un certo punto arrivo al CAP e divido prima e dopo.
I dati di input sono presenti nella tabella SASreport, e la tabella vuota è chiamata uscita.
Da errore su Set cst = dbs.OpenRecordset(stroutta) ...
errore 13 tipo non corrispondente
riuscite a vedere l'inghippo??