Corsi on-line

Interazione con i database

  • CommentiScrivi un commento
  • ForumDiscuti sul forum
  • PrevFunzioni di conversione e Funzioni predefinite
  • Next

VB è nato principalmente per la creazione di potenti interfacce che permettono la gestione locale o via rete (NON Internet) di dati residenti su una fonte di dati quale un database. Essendo un prodotto di casa Microsoft, VB preferisce lavorare con prodotti (DBMS, ovvero gestori di database) Microsoft come Access e SQL Server, ma lavora correttamente anche con DBMS di case differenti come Oracle.

In questo capitolo ci baseremo sull'interazione con Access, preferibilmente versione 2000 e do per scontato che il lettore abbia almeno un'infarinatura di base di SQL.

L'articolo continua dopo la pubblicità

Per la connessione con una fonte di dati e la gestione dei dati ivi residenti, VB utilizza l'oggetto ADO (ActiveX Data Object) per l'interfacciamento tra il programma e la fonte di dati stessa. ADO mette a disposizione, tra l'altro, due oggetti fantastici, ovvero Connection per la gestione della connessione ed altre utility, e Recordset per la gestione fisica dei dati.

Si crei un nuovo EXE standard e si acceda al menu

Progetto / Riferimenti...
per l'importazione dei riferimenti ad ADO, selezionando le voci come nell'immagine seguente:
Si nomini la Form frmDatabase, si inseriscano due Label con Caption Nome e Cognome (non preoccupatevi di cambiare la proprietà Name) e due TextBox in cui svuotare la proprietà Text e modificare i nome come txtNome e txtCognome. Si aggiunga poi un CommandButton da nominare cmdInserisci e modificare la Caption in Inserisci. Questa Form ci consentirà di effettuare inserimenti nel database Access ce creeremo tra poco; l'immagine seguente mostra il risultato finela della Form:
Si salvi il progetto dal menu
File / Salva progetto con nome...
nella cartella test da creare sotto il drive C:
C:\test
All'interno di questa cartella troverete fei file di progetto creati automaticamente da VB; aggiungete in questa cartella il file Access database.mdb al cui interno creare la tabella utenti in cui inserire i campi id (Contatore), nome (Testo) e cognome (Testo); appena espletata questa operazione tornare sulla Form in visualizzazione struttura, accedere al codice della Form ed inserire queste righe nella parte generale:
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim stringa As String
I tipi di dato ADODB.Connection ed ADODB.Recordset sono stati aggiunti a VB per mezzo dell'importazione dei riferimenti come accennato in precedenza.

Doppio click sul CommandButto per accedere alla Sub in cui inserire il seguente codice:

Private Sub cmdInserisci_Click()
    If Len(Trim(txtNome.Text)) = 0 Then
        MsgBox "Inserire il nome", vbCritical, "ERRORE"
        txtNome.SetFocus
        Exit Sub
    End If
    If Len(Trim(txtCognome.Text)) = 0 Then
        MsgBox "Inserire il cognome", vbCritical, "ERRORE"
        txtCognome.SetFocus
        Exit Sub
    End If

    stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    stringa = stringa & "C:\test\database.mdb"

    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    cn.Open stringa
    rs.Open "utenti", cn, 3, 3

    rs.AddNew
        rs("nome") = txtNome.Text
        rs("cognome") = txtCognome.Text
    rs.Update

    Set cn = Nothing
    Set rs = Nothing

    MsgBox "Inserimento effettuato", vbOKOnly, "CONFERMA"
End Sub
A prima vista questo codice potrebbe destare qualche perplessità al lettore più inesperto, quindi affrontiamo le singole fasi della Sub.

Controllo che i campi nome e cognome siano stati compilati correttamente, utilizzando l'espressione Exit Sub per uscire dalla Sub qualora le condizioni non siano state soddisfatte e non si vuol permettere la continuazione della routine:

If Len(Trim(txtNome.Text)) = 0 Then
    MsgBox "Inserire il nome", vbCritical, "ERRORE"
    txtNome.SetFocus
    Exit Sub
End If
If Len(Trim(txtCognome.Text)) = 0 Then
    MsgBox "Inserire il cognome", vbCritical, "ERRORE"
    txtCognome.SetFocus
    Exit Sub
End If
A condizioni soddisfatte creo la stringa di connessione al database e la memorizzo nella variabile stringa:
stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
stringa = stringa & "C:\test\database.mdb"
Con la clausola Set imposto le variabili cn ed rs come nuove istanze degli oggetti Connection e Recordset:
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Apro la connessione al database ed il Recordset in modalità scrittura, passando al metodo Open il nome della tabella su cui voglio lavorare, il nome della connessione che sto utilizzando ed i cursori appropriati:
cn.Open stringa
rs.Open "utenti", cn, 3, 3
Utilizzo i metodi AddNew ed Update per aggiungere un nuovo record alla tabella e per aggiornarlo; passo poi al Recordset i campi della tabella e li valorizzo con le variabili contenenti i dati corrispondenti:
rs.AddNew
    rs("nome") = txtNome.Text
    rs("cognome") = txtCognome.Text
rs.Update
Pulisco la memoria del buffer dalle variabili contenenti la connessione ed il recordset, settandole sul valore speciale di VB Nothing:
Set cn = Nothing
Set rs = Nothing
In fine, ad operazioni espletate, lancio un messaggio di conferma:
MsgBox "Inserimento effettuato", vbOKOnly, "CONFERMA"
Vediamo adesso come leggere i dati dal database. Si aggiunga una nuova Form dal menu
Progetto / Inserisci form
si scelga Form e si confermi. Si assegni alla Form il nome frmLettura e si aggiunga una Label di nome lblDati grande quanto tutta la Form.

Si acceda all'evento Form_Load() della Form con un doppio click in un punto qualsiasi della Form stessa e si inserisca nella parte generale il seguente codice:

Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim stringa As String
In Form_Load(), invece, inserire il seguente codice:
Private Sub Form_Load()
    stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    stringa = stringa & "C:\test\database.mdb"
    
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    cn.Open stringa
    rs.Open "SELECT * FROM utenti", cn, 1

    If rs.EOF Then
        lblDati.Caption = "Nessun dato"
    Else
        While rs.EOF = False
            lblDati.Caption = lblDati.Caption _
                            & rs("nome") & " " _
                            & rs("cognome") & vbCrLf
            rs.MoveNext
        Wend
    End If

    Set cn = Nothing
    Set rs = Nothing
End Sub
Gran parte del codice appena presentato non è molto differente da quello di esempio per l'inserimento: la stringa di connessione al database è la stessa, è necessario settare ed aprire, ed in fine svuotare, gli oggetti Connection e Recordset. Concentriamoci sulla lettura dei dati:
If rs.EOF Then
    lblDati.Caption = "Nessun dato"
Else
    While rs.EOF = False
        lblDati.Caption = lblDati.Caption _
                        & rs("nome") & " " _
                        & rs("cognome") & vbCrLf
        rs.MoveNext
    Wend
End If
La logica seguita è la seguente: se non ci sono dati nella tabella, ovvero se la lettura del Recordset arriva alla fine della tabella (EOF - End Of File) lancio un messaggio che avvisa che non sono stati trovati dati; altrimenti effettuo un ciclo e stampo a video nella Label tutti i record tirati fuori dalla stringa SQL
SELECT * FROM utenti
passata al Recordset impostato in lettura.

Corsi
  • Corso MS Access
    Corso MS Access
    Impara a creare e gestire database in maniera semplice e veloce. A partire da 29 €
  • Corso Visual Basic 6
    Corso Visual Basic 6
    Realizzare applicazioni Desktop con VB6. A partire da 49 €
Vedi anche...
Altre Guide