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??