Lezione 10: metodi di navigazione in un database e gli errori comuni

Seguendo le precedenti lezioni, avete avuto modo di creare la vostra prima applicazione in grado di interagire con una base di dati.
Lezione 10: metodi di navigazione in un database e gli errori comuni

Seguendo le precedenti lezioni, avete avuto modo di creare la vostra prima applicazione in grado di interagire con una base di dati. Gioiosi del risultato raggiunto, supponete di volerla distribuire ai vostri amici per mostrare loro i passi da gigante che avete compiuto.

Molti dei vostri amici lamenteranno immediatamente il fatto che, eseguendo l’applicazione sui loro computer, questa non riesce a leggere i dati dal database comunicando che quest’ultimo è inesistente.
Eppure sul vostro computer funziona tutto alla perfezione!

Durante la progettazione della nostra prima applicazione abbiamo commesso uno degli errori più comuni: all’interno della proprietà DatabaseName del DataControl abbiamo specificato il percorso all’interno del quale risiede il database contenente i dati che desideriamo leggere. Se l’applicazione da noi sviluppata venisse installata in una diversa cartella sul disco fisso questa non funzionerebbe perché il database verrebbe ricercato in una cartella che, molto probabilmente, non esiste.

Il problema può essere risolto impostando “dinamicamente”, ad ogni avvio dell’applicazione, il percorso corretto all’interno del quale risiede il database.
Poniamo il database mdb nella cartella ove risiede la nostra applicazione Visual Basic, quindi inseriamo nel progetto un modulo (selezionate dal menù Progetto la voce Inserisci modulo e fate doppio clic sull’icona Modulo).
Nel codice del Modulo1 inserite la seguente riga:

Global appldir

Per maggiori informazioni rileggete la lezione 6 in modo da puntualizzare il significato degli oggetti globali.

Esattamente come abbiamo fatto nella lezione 6 per il file borsa.dat, inseriamo il seguente codice nell’evento Load del Form1 (Form_Load):

' stabilisce la cartella ove è
' stata installata l'applicazione
appldir = LCase(App.Path)
If Right$(App.Path, 1) "\" Then appldir = appldir + "\"

In questo modo la cartella all’interno della quale viene eseguita la nostra applicazione verrà memorizzata nella variabile globale denominata appldir. Non ci rimane altro che “comunicare” al DataControl che il database azienda.mdb è sempre contenuto nella cartella ove è stata installata la nostra applicazione.

Per raggiungere tale scopo sarà sufficiente inserire la riga successiva immediatamente dopo il codice appena inserito:

Data1.DatabaseName = appldir & "azienda.mdb"

Le tre righe di codice aggiunte faranno sì che l’applicazione possa funzionare senza problemi su tutti i personal computer, qualunque sia il nome attribuito alla cartella contenente applicazione e database azienda.mdb.

I metodi di navigazione

Avrete certamente notato come cliccando sulle freccette del DataControl, in fase di esecuzione dell’applicazione è possibile spostarsi fra i record memorizzati all’interno del database. Il DataControl mette a disposizione quattro metodi per la navigazione: MoveFirst (consente di raggiungere il primo record contenuto nel database), MoveLast (ultimo record), MoveNext (record successivo) e MovePrevious (record precedente).

Provate ad inserire quattro pulsanti sul form ed attribuite a ciascuno di essi un nome che consenta di identificarli facilmente: modificate la proprietà (Name) di ciascuno di essi ed inserire per esempio btn_primo per il primo pulsante, btn_ultimo per il secondo pulsante, btn_successivo per il terzo e btn_precedente per per il quarto.

Modificate quindi la proprietà Caption di ciascun pulsante in modo opportuno specificando Primo record per il primo pulsante, Ultimo record per il secondo, Record successivo per il terzo e Record precedente per il quarto.

L’estetica non è, in questa sede, il nostro obiettivo principale. I pulsanti “spartani”, molto essenziali, appena creati potranno essere eventualmente sostituiti, in un secondo tempo, con dei pulsanti tridimensionali ai quali sia possibile applicare un’icona. Vi consigliamo, a tal proposito, di effettuare delle esperienze con il controllo Threed che può essere aggiunto al vostro progetto semplicemente scegliendo dal menù Progetto di Visual Basic la voce Componenti, attivando la casella Sheridan 3D Controls, quindi premendo il pulsante OK.
Dalla casella degli strumenti scegliete l’oggetto SSCommand che vi consentirà di inserire nella vostra applicazione pulsanti decisamente più “alla moda”. Per modificare l’aspetto del vostro pulsante 3D fate riferimento alle seguenti proprietà:
BevelWidth (imposta l’altezza del pulsante tridimensionale)
Caption (modifica il testo visualizzato sul pulsante)
Font3D (specifica se far uso di caratteri tridimensionali anche per il testo visualizzato sul pulsante)
Picture (consente di inserire un’icona od una immagine sul pulsante 3D)
RoundedCorners (specifica se gli spigoli del pulsante devono essere arrotondati o meno)
ToolTipText (il testo inserito in questa proprietà verrà visualizzato in una piccola finestra su sfondo giallo non appena il puntatore del mouse viene spostato sul pulsante)

Facciamo ora doppio clic sul pulsante btn_primo (Primo record) per visualizzarne la finestra del codice relativa ed inseriamo:

Data1.Recordset.MoveFirst

Adesso clicchiamo due volte sul pulsante btn_ultimo (Ultimo record) per visualizzarne la finestra del codice relativa ed inseriamo:

Data1.Recordset.MoveLast

Passiamo ora al pulsante btn_successivo (Record successivo): in questo caso digitiamo quanto segue:

If Not Data1.Recordset.EOF Then
    Data1.Recordset.MoveNext
End If

La proprietà EOF è assai importante: è un’abbreviazione di End Of File (ossia di “fine del file”). In questo contesto è stata usata nella struttura decisionale If per far sì che venga raggiunto (mediante l’istruzione Data1.Recordset.MoveNext) il record successivo solo nel caso in cui non si sia arrivati al limite finale del database.

Supponiamo infatti di aver raggiunto, mediante una ripetuta esecuzione mediante dell’istruzione Data1.Recordset.MoveNext, l’ultimo record memorizzato all’interno della tabella di nostro interesse, contenuta nel database. Un’ulteriore esecuzione della stessa istruzione causerebbe un errore (nel caso di una lettura da un normale file di testo si avrebbe un errore di “lettura oltre la fine del file”). L’uso della struttura If Not Data1.Recordset.EOF Then consente di risolvere il problema permettendo l’esecuzione dell’istruzione Data1.Recordset.MoveNext solo nel caso in cui non sia stato già raggiunto l’ultimo record.
E’ possibile aggiungere un messaggio che informa dell’avvenuto raggiungimento della fine della tabella, integrando il codice appena inserito come segue:

If Not Data1.Recordset.EOF Then
    Data1.Recordset.MoveNext
Else
    MsgBox "E' stata raggiunta la fine della tabella", vbCritical, "Attenzione"
End If

Facciamo ora doppio clic sul pulsante btn_precedente (Record precedente) e digitiamo:

If Not Data1.Recordset.BOF Then
    Data1.Recordset.MovePrevious
Else
    MsgBox "E' stato raggiunto l'inizio della tabella", vbCritical, "Attenzione"
End If

In questo caso è stata utilizzata la proprietà BOF (Begin Of File) per identificare il primo record.
Tenete presente che il codice appena illustrato per i pulsanti denominati btn_primo, btn_ultimo, btn_successivo e btn_precedente deve essere associato all’evento Click di ogni singolo pulsante.

Ti consigliamo anche

Link copiato negli appunti