mercoledì 4 gennaio 2012

[Access VBA] Ricerca Multi-Tabella

Descrizione :
Un mio esempio pratico VBA per ricercare una determinata stringa in tutte le Tabelle e Campi di un DB.

+ Articolo :

Inserisco nel Blog questa mia soluzione VBA, data tempo fa ad un utente che chiedeva come
cercare una determinata stringa in tutti i Campi di tutte le Tabelle di un DB Access, utilizzando codice VBA.
Sebbene la richiesta possa sembrare singolare, questo è quel genere di cose che non si trovano certo nei primi 10 risultati di Google, e quindi a maggior ragione nel mio Blog non può mancare.

Il processo illustrato di seguito tiene traccia dell'eventuale nome Tabella e relativo nome Campo in cui la ricerca è andata a buon fine.
Il risultato è una Collection di stringhe con tutte le occorrenze ottenute, che può essere successivamente ciclata, e ad esempio scritta in altro DB, su file, ecc...

--> Codice Esempio :

    Dim ricerca As String
    ricerca = "prova"
    
    Dim nomeTabella As String
    Dim nomeCampo As String
    
    Dim Risultati As New Collection
    
    Dim n As Variant
    Dim risultato As Variant
    Dim T As TableDef
    Dim F As Field
    
    For Each T In CurrentDb.TableDefs
        If Left(T.Name, 4) <> "MSys" Then
            For Each F In T.Fields
                On Error Resume Next
                n = DLookup("[" & F.Name & "]", T.Name, "[" & F.Name & "]='" & ricerca & "'")
                If Err.Number = 0 And n = ricerca Then
                    risultato = ricerca & " trovato su " & T.Name & " / " & F.Name
                    Risultati.Add risultato
                End If
                Err.Clear
            Next F
        End If
    Next T
    
    'For Each risultato In Risultati
    '    MsgBox risultato
    'Next risultato

Il controllo sui possibili errori della DLookup(), unito all'esclusione delle Tabelle di sistema,
rende il codice già abbastanza "robusto" pur mantenendo la sua semplicità e adattabilità a vari casi.

Ho volutamente lasciato le ultime 3 linee commentate per mantenere un'idea di test dei risultati ottenuti. Nel caso reale ovviamente, è meglio evitare di correre il rischio di ricevere un "treno" di MessageBox.

+ Fine Articolo.

Un Click su "Mi Piace" è il modo migliore per ringraziare l'autore di questo articolo.




0 commenti:

Posta un commento

 
Design by Free WordPress Themes Modificato da MarcoGG