indietro

LA  PRIMA  PROCEDURA  DI  IMPORTAZIONE  DATI

Come già più volte anticipato, molti sono gli argomenti tralasciati in questo mini-pseudo-corso, ma lo scopo è quello di arrivare a mostrare degli esempi di come impostare le istruzioni per l'importazione di dati da database esterni. Le istruzioni che presento saranno comunque commentate, e coloro che masticano un pò di vba, potranno così capirle e modificarle per le proprie esigenze. Esistono delle istruzioni che dovranno essere assimilate come standard in tutte le procedure che ogni pellegrino istruirà, modificando solo lo stretto necessario; cercherò di evidenziare le basi standard.

Visto che la nostra intenzione è di focalizzare le istruzioni per il collegamento e l'interrogazione al database, lasceremo le rimanenti istruzioni interpretabili dai pellegrini. Nell'esempio useremo la Cella Attiva sul foglio di lavoro come l'inizio della destinazione per i dati che verranno importati. Ovvio è che le istruzioni potranno essere modificate nella destinazione, semplicemente indicando la cella o il Range preciso che vorremo. Le istruzioni standard le evidenziamo in rosso. Un'altra cosa: i nomi assegnati alle variabili sono lasciate al libero arbitrio, ognuno può indicarle col nome che desidera, basterà ricordarsi di usare quel nome quando ci si riferirà a quella variabile (in verde sono i commenti):

Sub MiaImport()

'inizio dichiarazioni delle variabili e loro "tipo"; il nome può essere modificato, il "tipo" di 'variabile NO
Dim DB As Database, FonteDB As String, CellaAtt As Range, QuerySQL As String

'assegnazione alla variabile FonteDB del percorso completo dove si trova il database, e 'relativo nome
FonteDB
= "C:\Progetti\Contabilita\contab.mdb"

'si pone (setta) la variabile DB ricorrendo al metodo OpenDatabase con indicata l'origine
Set DB = OpenDatabase(FonteDB)

'con le 4 righe in blu sotto, si setta la cella attiva sul foglio come cella iniziale per 'l'importazione dei dati e le due celle a destra, assegnando noi i nomi dei campi che 'importeremo dalla tabella del database; in questo modo predisponiamo le "intestazioni di 'colonna" che formeranno la nuova tabella sul foglio di lavoro
Set CellaAtt = ActiveCell
CellaAtt = "ciccia"
CellaAtt.Offset(0, 1) = "verdura"
CellaAtt.Offset(0, 2) = "crema"

'dichiarazione della variabile RecSet (stesso discorso per come chiamare la variabile, 'basta non cambiare il "tipo" di variabile) come (As) Recordset
Dim RecSet As Recordset

'ed eccoci alla query: assegnazione alla variabile QuerySQL delle istruzioni per la ricerca 'dei dati, cioè : seleziona tutto dalla tabella "prova" (del database) dove il campo "ciccia" è 'maggiore o uguale a 250. Da notare che la query è racchiusa tra doppi apici. Le query 'devono SEMPRE essere racchiuse tra due doppi apici. Ricordo inoltre che una query 'reperisce i dati all'interno dei campi indicati, ma NON i nomi dei campi. Per questo 'abbiamo usato le istruzioni precedenti per impostare le intestazioni di colonna (o campi).
QuerySQL = "SELECT * from prova where ciccia >=250;"

'ora si setta la variabile RecSet ricorrendo al metodo OpenRecordset del database di cui 'la query ora fa parte
Set RecSet = DB.OpenRecordset(QuerySQL)
'si inizia ad importare i dati nelle celle di destinazione con il metodo While, cioè: gira fino a 'che non trovi la fine dei record (EOF= End Of File (del Recordset))
While Not RecSet.EOF

'assegnazione alla variabile i dell'indice di riga, con incremento ad ogni record di 1
i = i + 1

'quindi si importa nella cella di cui è reperito il numero di riga, del campo (Fields) del 'RecSet. Ricordo che negli insiemi in VB un indice parte da zero (0), non da uno.
CellaAtt.Offset(i) = RecSet.Fields(0)
CellaAtt.Offset(i, 1) = RecSet.Fields(1)
CellaAtt.Offset(i, 2) = RecSet.Fields(2)

'questa istruzione, una volta trasferito il record sul foglio di lavoro, fa scorrere con 'movenext (muovi al successivo) i record (se preferite: le righe) nel RecSet. Ricordo che 'RecSet ora dovete vederlo come una tabella formata da righe (record) e dai campi '(colonne) ottenuti con la query.
RecSet.movenext

'con Wend si ripete il ciclo fino alla fine dei record (EOF)
Wend

'si chiude la tabella, meglio dire la query, e si chiude il database, cancellandole dalla 'memoria. Resteranno però i dati sul foglio di lavoro.
RecSet.Close: DB.Close

End Sub

Vediamo le immagini dell'esempio: la prima foto riporta il risultato che avremo sul foglio di lavoro a seguito della query (la cella A9 è la cella in quel momento attiva):

Questo invece sarebbe stato il risultato se la query fosse stata compilata senza restrizioni, cioè con tutta la routine sopra riportata, ma con questa query, cioè: seleziona tutto dalla tabella "prova":

QuerySQL = "SELECT * from prova;"

Ripeto: come vedete è di estrema importanza in questo tipo di importazione dati, la precisa definizione della query. Nel paragrafo successivo vedremo un'altra serie di istruzioni che anzichè cancellare la query, la renderanno disponibile per successive interrogazioni.

prelevato sul sito http://ennius.interfree.it