INTERNET EXPLORER? Ti consiglio di navigare questo sito con Mozilla Firefox oppure con Google Chrome.

Una rubrica in VB e Ms Access

Applicazioni desktop con Visual Basic 6
Impara a creare applicazioni gestionali col Visual Basic

Questo è il primo Articolo della sezione Visual Basic (6) di lukeonweb.net per cui spero che il lettore abbia almeno un minimo di dimestichezza col linguaggio e con l'ambiente di sviluppo; per qualche buon cenno sul linguaggio consiglio, almeno, di dare una lettura agli Articoli della sezione VBScript. Ci occuperemo della realizzazione di una rubrica che vede Ms Access come DBMS per la manipolazione dei dati. Una rubrica può avere diverse sfaccettature ed utility: quella che analizzeremo in questa sede è molto semplice ma funzionale e si presenta come nella figura che segue:



Il database database.mdb sarà composto dalla tabella utenti con i seguenti campi:

• id (Contatore)
• nome (Testo, 50)
• cognome (Testo, 50)
• indirizzo (Testo, 100)
• telefono (Testo, 15)

e va salvato nella stessa directory in cui salverete il progetto.

Di seguito i nomi da assegnare a tutti i controlli della form:

• lblSeleziona (Caption: Seleziona un Utente)
• cmbSeleziona (Unica Combo Box della pagina, in basso a destra individuare la proprietà Style e settarla su 2 - Dropdown List per non renderla editabile)
• cmdSeleziona (Caption: OK)
• lblNome (Caption: Nome)
• lblCognome (Caption: Cognome)
• lblIndirizzo (Caption: Indirizzo)
• lblTelefono (Caption: Telefono)
• txtNome (Caption: "" - MaxLength: 50)
• txtCognome (Caption: "" - MaxLength: 50)
• txtIndirizzo (Caption: "" - MaxLength: 100)
• txtTelefono (Caption: "" - MaxLength: 15)
• cmdSalva (Caption: Salva)
• cmdCancella (Caption: Cancella)
• cmdPulisci (Caption: Pulisci)
• cmdEsci (Caption: Esci)
• lblMessaggio (Caption: "")

Per chi non conoscesse questo dettaglio, per sottolineare un carattere ed utilizzarlo come Short Cut è sufficiente inserire una e-commerciale (&) prima della lettera da sottolineare nella proprietà Caption del controllo in basso a destra.

Prima di iniziare al lavorare è necessario importare nel progetto i riferimenti ad ADO dal menu Progetto / Riferimenti, selezionarle il segno di spunta a fianco e cliccare OK, come nell'immagine che segue:



Posizionatevi sul codice sorgente dell'applicazione dal menu Visualizza / Codice (che all'inizio risulterà vuota) e dichiarate le seguenti variabili:

Option Explicit
    Dim cn As ADODB.Connection ' DICHIARO L'OGGETTO CONNECTION
    Dim rs As ADODB.Recordset  ' DICHIARO L'OGGETTO RECORDSET
    Dim s() As String          ' STRINGA DI ARRAY CHE SERVIRA' IN ALCUNE FASI DEL PROGRAMMA
Passiamo ora in rassegna le varie Sub del programma; al caricamento dobbiamo caricare nella Combo Box tutti i record della tabella utenti; fare doppio click col mouse in una qualsiasi area della form (attenzione a non cliccare su nessuno dei controlli creati in precedenza) utilizzando il seguente codice:
Private Sub Form_Load()
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    ' APRO LA CONNESSIONE E LANCIO LA QUERY PER RECUPERARE I DATI
    cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=database.mdb"
    rs.Open "SELECT id, nome, cognome FROM utenti ORDER BY cognome ASC", cn, 1

    ' INSERISCO UN ITEM VUOTO NELLA COMBO BOX
    cmbSeleziona.AddItem ("")

    ' ESTRAGGO I DATI CHE MI INTERESSANO DALLA TABELLA E LI INSERISCO NELLA COMBO BOX
    While rs.EOF = False
        cmbSeleziona.AddItem (rs("id").Value & " - " & rs("cognome").Value & " " & rs("nome").Value)
        rs.MoveNext
    Wend

    rs.Close
    cn.Close
End Sub
Passiamo ora alla selezione effettiva del record ed inseriamo tutti i dati nelle rispettive Text Box; doppio click sul pulsante etichettato come OK ed inserire il seguente codice:
Private Sub cmdSeleziona_Click()
    If cmbSeleziona.Text = "" Then ' VERIFICO CHE SIA SELEZIONATO UN RECORD REALE, NON VUOTO
        lblMessaggio.Caption = "Selezionare un Utente valido"
    Else
        lblMessaggio.Caption = ""

        ' UTILIZZO LA FUNZIONE SPLIT PER RECUPERARE IL VALORE ID NELLA COMBO BOX
        s = Split(cmbSeleziona.Text, " ")

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

        ' APRO LA CONNESSIONE E LANCIO LA QUERY PER RECUPERARE IL RECORD SELEZIONATO
        cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=database.mdb"
        rs.Open "SELECT * FROM utenti WHERE id = " & CInt(s(0)), cn, 1

        ' RIEMPIO I CAMPI DELLA FORM CON I VALORI ESTRATTI DAL DATABASE
        txtNome.Text = rs("nome").Value
        txtCognome.Text = rs("cognome").Value
        txtIndirizzo.Text = rs("indirizzo").Value
        txtTelefono.Text = rs("telefono").Value

        rs.Close
        cn.Close
    End If
End Sub
Siamo arrivati alla parte clou dell'applicazione, in cui viene chiesto all'utilizzatore della nostra rubrica di salvare un record: a seconda del valore della Combo Box il programma capirà se si tratta di un nuovo record (se viene lasciato selezionato l'item vuoto, il primo) o se si tratta di un record esistente (se viene selezionato uno qualsiasi dei record). Fare doppio click sul pulsante etichettato come Salva ed inserire il seguente codice:
Private Sub cmdSalva_Click()
    ' CONTROLLO LA VALIDITA' DEI CAMPI
    If Len(Trim(txtNome.Text)) = 0 Then
        lblMessaggio.Caption = "Inserire il nome"
        txtNome.SetFocus
    ElseIf Len(Trim(txtCognome.Text)) = 0 Then
        lblMessaggio.Caption = "Inserire il cognome"
        txtCognome.SetFocus
    ElseIf Len(Trim(txtIndirizzo.Text)) = 0 Then
        lblMessaggio.Caption = "Inserire l'indirizzo"
        txtIndirizzo.SetFocus
    ElseIf Len(Trim(txtTelefono.Text)) = 0 Or IsNumeric(txtTelefono.Text) = False Then
        lblMessaggio.Caption = "Inserire il telefono (numerico)"
        txtTelefono.SetFocus
    Else ' SE TUTTE LE CONDIZIONI SONO STATE SODDISFATTE...

        Dim SQL As String      ' COMANDO SQL A SECONDA CHE SI TRATTI DI UNA INSERT O DI UN UPDATE
        Dim conferma As String ' MESSAGGIO DI CONFERMA (SECONDO LO STESSO CRITERIO DESCRITTO SOPRA)

       ' COME SOPRA...
        s = Split(cmbSeleziona.Text, " ")

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

        cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=database.mdb"

        If cmbSeleziona.Text = "" Then ' ...ESEGUO LA INSERT
            SQL = "INSERT INTO utenti " _
            & "(nome, cognome, indirizzo, telefono) " _
            & "VALUES " _
            & "('" & Replace(txtNome.Text, "'", "''") & "', " _
            & "'" & Replace(txtCognome.Text, "'", "''") & "', " _
            & "'" & Replace(txtIndirizzo.Text, "'", "''") & "', " _
            & "'" & Replace(txtTelefono.Text, "'", "''") & "')"
            conferma = "Inserimento effettuato con successo"
        Else                           ' ...ESEGUO L'UPDATE
            SQL = "UPDATE utenti SET " _
            & "nome = '" & Replace(txtNome.Text, "'", "''") & "', " _
            & "cognome = '" & Replace(txtCognome.Text, "'", "''") & "', " _
            & "indirizzo = '" & Replace(txtIndirizzo.Text, "'", "''") & "', " _
            & "telefono = '" & Replace(txtTelefono.Text, "'", "''") & "' " _
            & "WHERE id = " & CInt(s(0))
            conferma = "Modifica effettuata con successo"
        End If

        ' ESEGUO REALMENTE IL COMANDO SQL CHE ARRIVA ALL'ESTERNO DELLA CONDIZIONE
        cn.Execute (SQL)
        lblMessaggio.Caption = conferma

        cn.Close

        ' PULISCO E RICARICO LA COMBO BOX
        cmbSeleziona.Clear
        Call Form_Load
    End If
End Sub
Ultimo step davvero importante è la cancellazione del record selezionato. Il principio è lo stesso esaminato in fase di salvataggio delle informazioni. Fare doppio click sul pulsante etichettato come Cancella ed inserire il seguente codice:
Private Sub cmdCancella_Click()
    If cmbSeleziona.Text = "" Then ' CONTROLLO CHE IL RECOR SELEZIONATO NON SIA VUOTO
        lblMessaggio.Caption = "Selezionare un Utente valido"
    Else
       ' COME SOPRA...
        s = Split(cmbSeleziona.Text, " ")

        ' ESEGUO LA CANCELLAZIONE DEL RECORD SELEZIONATO
        Set cn = New ADODB.Connection
        cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=database.mdb"
        cn.Execute ("DELETE * FROM utenti WHERE id = " & CInt(s(0)))
        cn.Close

        ' PULISCO E RICARICO LA COMBO BOX
        cmbSeleziona.Clear
        Call Form_Load
    End If
End Sub
Le ultimissime fasi del programma prevedono la pulizia dei controlli della form e l'uscita dal programma stesso. Di seguito i due codice:
Private Sub cmdPulisci_Click()
    ' PULISCE I CAMPI
    txtNome.Text = ""
    txtCognome.Text = ""
    txtIndirizzo.Text = ""
    txtTelefono.Text = ""
    lblMessaggio.Caption = ""
End Sub
Private Sub cmdEsci_Click()
    Unload Me ' ESCE DAL PROGRAMMA
End Sub
La rubrica appena esaminata non pretende di essere il migliore degli strumenti immaginabili nel suo genere, serve a solo scopo didattico. A voi il compito di crearne una più funzionale, ad esempio con l'aggiunta di altri campi e di qualche strumento aggiuntivo per la manipolazione dei dati.

IN EVIDENZA