Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di mschievano
    Registrato dal
    Jan 2002
    residenza
    Padova, Italy
    Messaggi
    1,048

    [Access 2000] Scomposizione toponomastica

    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...)
    Nuovo Sistema: iMac 24" dual core intel... e il virus non c'è più.
    un mio articolo su
    sognandolondra

  2. #2
    Utente di HTML.it L'avatar di mschievano
    Registrato dal
    Jan 2002
    residenza
    Padova, Italy
    Messaggi
    1,048

    Re: [Access 2000] Scomposizione toponomastica

    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??
    Nuovo Sistema: iMac 24" dual core intel... e il virus non c'è più.
    un mio articolo su
    sognandolondra

  3. #3
    Utente di HTML.it L'avatar di mschievano
    Registrato dal
    Jan 2002
    residenza
    Padova, Italy
    Messaggi
    1,048

    ho fatto tutto da solo!

    codice:
    Option Compare Database
    Option Explicit
    
    Public Function leggicolonna() As Variant
    Dim dbs, cbs As Database
    Dim rst, cst As Recordset
    Dim strSQL As String
    Dim indir As String
    Dim citt As String
    Dim nome As String
    Dim usci As Recordset
    Dim po As Integer
    
        
        ' Restituisce il riferimento al database corrente.
        Set dbs = CurrentDb
        Set usci = CurrentDb().OpenRecordset("uscita")
        
       ' imposta la SQL di selezione
        strSQL = "SELECT * FROM sasReport"
        Set rst = dbs.OpenRecordset(strSQL)
        rst.MoveFirst
       
        While Not rst.EOF
            nome = rst("nome")
            po = InStr(1, nome, ",")
            If po <> 0 Then
                nome = Mid(nome, 1, po - 1)
            End If
            If Splitta(rst("indirizzo"), indir, citt) = True Then
              If nome <> "" Or indir <> "" Or citt <> "" Then
                usci.AddNew
                usci.Fields(0) = nome
                usci.Fields(1) = indir
                usci.Fields(2) = citt
                usci.Update
              End If
           End If
            rst.MoveNext
        Wend
        rst.Close
        usci.Close
        Set usci = Nothing
        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)
        
        Splitta = True
        
    End Function
    questo è il modulo.
    in ingresso viene valorizzata una tabella a 2 colonne : nome e indirizzo.
    in uscita viene valorizzata una tabella a 3 colonne: nome, via e civico, cap

    BUONE FESTE!!
    Nuovo Sistema: iMac 24" dual core intel... e il virus non c'è più.
    un mio articolo su
    sognandolondra

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.