Programmi Visual Basic - prof. Claudio Maccherani - Perugia - 2009
accesso a database (Access) in Visual Basic 2008 con ADO.NET in modalità connessa
applicazione
Alunni6
- database MS Access
Alunni.mdb
- tabella
Alunni
Tabella
ALUNNI
:
Matricola
long,
Nome
string
*
30,
Data Nascita
date,
Luogo Nascita
string
*
20,
Classe
integer,
Sezione
string
*
1,
Corso
string
*
1
'+------------------------------------------------------------------------------------------+ '| Alunni6 - applicazione VB2008, esempio di gestione singola tabella | '| utilizzando ADO.NET (ActiveX Data Object) in modalità connessa | '| (Prof.Claudio Maccherani) | '+------------------------------------------------------------------------------------------+ Option Strict Off Option Explicit On Imports System.Data.OleDb ' per ADO.NET Imports VB = Microsoft.VisualBasic ' per usare alcune vecchie funzioni Visual Basic 6.0 Friend Class frmAlunni6 Inherits System.Windows.Forms.Form Dim Matricola As Integer Dim Nome As String Dim Classe As Short ' per la ricerca Dim stConnection As String ' stringa di connessione (ADO) Dim stSql As String ' comando SQL (ADO) Dim cnAlu As New ADODB.Connection ' connessione alunni (ADO) Dim rsAlu As New ADODB.Recordset ' recordset alunni (ADO) Dim cnAluAdoNet As OleDbConnection ' OleDbConnection (ADO.NET) Dim cmdSqlAdoNet As New OleDbCommand ' OleDbCommand (ADO.NET) Dim drAluAdoNet As OleDbDataReader ' OleDbDataReader (ADO.NET) '-------------------------------------------------------------------------------------------- Private Sub frmAlunni6_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load ' al caricamento si possono impostare le proprietà dei controlli ' la proprietà Path dell'oggetto App restituisce il percorso dell'applicazione ' in ADO: stConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ My.Application.Info.DirectoryPath & "\Alunni.mdb" cnAlu.Open(stConnection) ' apre la connessione al database stSql = "Select * From Alunni" ' prepara la query rsAlu.Open(stSql, stConnection, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockPessimistic) ' esegue la query ' in ADO.NET: cnAluAdoNet = New OleDbConnection(stConnection) ' imposta la connessione cnAluAdoNet.Open() ' apre la connessione cmdSqlAdoNet.CommandText = stSql ' imposta la query sql cmdSqlAdoNet.Connection = cnAluAdoNet cmdSqlAdoNet.CommandType = CommandType.Text drAluAdoNet = cmdSqlAdoNet.ExecuteReader() ' esegue la query e crea il DataReader End Sub '-------------------------------------------------------------------------------------------- Private Sub frmAlunni6_Activated(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Activated selIndexMatricola.Checked = True ' imposta il pulsante dell'indice matricola Call cmdFirst_Click(cmdFirst, New System.EventArgs()) ' legge il primo Call Elenco() End Sub '-------------------------------------------------------------------------------------------- Private Sub Elenco() ' visualizza sulla list box l'elenco deglio studenti Dim riga As String : lstA.Items.Clear() lstA.Items.Add("Matr Nome" & Space(16) & " Data Luogo Cla Sez Cor") lstA.Items.Add("---------------------------------------------------------------------") Do While drAluAdoNet.Read() riga = VB.Right(Space(4) & drAluAdoNet.Item("Matricola"), 4) & " " & _ VB.Left(drAluAdoNet.Item("Nome") & Space(20), 18) & " " & _ drAluAdoNet.Item("Data Nascita") & " " & _ VB.Left(drAluAdoNet.Item("Luogo Nascita") & Space(20), 11) & " " & _ drAluAdoNet.Item("Classe") & " " & drAluAdoNet.Item("Sezione") & " " & _ drAluAdoNet.Item("Corso") lstA.Items.Add(riga) Loop End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdFirst_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdFirst.Click ' pulsante FIRST If Not rsAlu.BOF And Not rsAlu.EOF Then ' dopo aver controllato che la tabella non sia vuota .. rsAlu.MoveFirst() ' va al primo record (dell'indice corrente) Call Visualizza_Record() ' visualizza il record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdNext_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdNext.Click ' pulsante NEXT If Not rsAlu.BOF And Not rsAlu.EOF Then ' dopo aver controllato che la tabella non sia vuota .. rsAlu.MoveNext() ' va al prossimo record (dell'indice corrente) If rsAlu.EOF Then ' controlla se si è "usciti" dalla tabella rsAlu.MoveLast() ' e se si torna sull'ultimo record End If Call Visualizza_Record() ' visualizza il record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdPrevious_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdPrevious.Click ' pulsante PREV If Not rsAlu.BOF And Not rsAlu.EOF Then ' dopo aver controllato che la tabella non sia vuota .. rsAlu.MovePrevious() ' va al precedente record (dell'indice corrente) If rsAlu.BOF Then ' controlla se si è "usciti" dalla tabella rsAlu.MoveFirst() ' e se si torna sul primo record End If Call Visualizza_Record() ' visualizza il record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdLast_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdLast.Click ' pulsante LAST If Not rsAlu.BOF And Not rsAlu.EOF Then ' dopo aver controllato che la tabella non sia vuota .. rsAlu.MoveLast() ' va al primo record (dell'indice corrente) Call Visualizza_Record() ' visualizza il record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdNuovo_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) ' pulsante NUOVO rsAlu.AddNew() ' aggiunge un record vuoto MsgBox("Inserisci i campi e memorizzali con SALVA !") txtMatricola.Focus() ' posiziona il cursore sulla matricola End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdSalva_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) ' pulsante SALVA If rsAlu.BOF And rsAlu.EOF Then Exit Sub ' se tabella vuota (prima non si è fatto neppure l'AddNew), esce End If rsAlu.Fields("Matricola").Value = Val(txtMatricola.Text) rsAlu.Fields("Nome").Value = txtNome.Text rsAlu.Fields("Data Nascita").Value = CDate(txtData.Text) rsAlu.Fields("Luogo Nascita").Value = txtLuogo.Text rsAlu.Fields("Classe").Value = Val(txtClasse.Text) rsAlu.Fields("Sezione").Value = txtSezione.Text rsAlu.Fields("Corso").Value = txtCorso.Text rsAlu.Update() ' registra il record corrente MsgBox("Record variato/registrato !") End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdCanc_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) ' pulsante CANC If Not rsAlu.BOF And Not rsAlu.EOF Then ' dopo aver controllato che la tabella non sia vuota .. If MsgBox("Confermi la cancellazione del record corrente ?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then rsAlu.Delete() ' cancella il record corrente cmdNext_Click(cmdNext, New System.EventArgs()) ' record successivo End If End If End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdFine_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) ' pulsante FINE End End Sub '-------------------------------------------------------------------------------------------- Private Sub selIndexMatricola_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles selIndexMatricola.CheckedChanged If eventSender.Checked Then ' pulsante di opzione MATRICOLA rsAlu.Close() : stSql = "Select * From Alunni Order by Matricola" rsAlu.Open(stSql, stConnection, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockPessimistic) rsAlu.Requery() ' aggiorna il recordset rieseguendo la query cmdFirst_Click(cmdFirst, New System.EventArgs()) ' primo record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub selIndexNome_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles selIndexNome.CheckedChanged If eventSender.Checked Then ' pulsante di opzione NOME rsAlu.Close() : stSql = "Select * From Alunni Order by Nome" rsAlu.Open(stSql, stConnection, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockPessimistic) rsAlu.Requery() ' aggiorna il recordset rieseguendo la query cmdFirst_Click(cmdFirst, New System.EventArgs()) ' primo record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub selIndexClasse_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles selIndexClasse.CheckedChanged If eventSender.Checked Then ' pulsante di opzione CLASSE rsAlu.Close() : stSql = "Select * From Alunni Order by Classe" rsAlu.Open(stSql, stConnection, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockPessimistic) rsAlu.Requery() ' aggiorna il recordset rieseguendo la query cmdFirst_Click(cmdFirst, New System.EventArgs()) ' primo record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdRicerca_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdRicerca.Click ' pulsante RICERCA Dim stCriterio As String : stCriterio = "" : If rsAlu.BOF And rsAlu.EOF Then Exit Sub If selIndexMatricola.Checked Then ' se l'indice corrente è Matricola Matricola = CInt(InputBox("Matricola da cercare (>=)")) stCriterio = "Matricola >= " & CStr(Matricola) ElseIf selIndexNome.Checked Then ' se l'indice corrente è Nome Nome = InputBox("Nome da cercare (>=)") stCriterio = "Nome >= '" & Nome & "'" ElseIf selIndexClasse.Checked Then ' se l'indice corrente è Classe Classe = CShort(InputBox("Classe da cercare (>=)")) stCriterio = "Classe >= " & CStr(Classe) End If If Len(Trim(stCriterio)) > 0 Then ' impostata una selezione rsAlu.Find((stCriterio)) ' esegue la ricerca Call Visualizza_Record() ' visualizza il record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub Visualizza_Record() ' visualizzazione record corrente txtMatricola.Text = rsAlu.Fields("Matricola").Value txtNome.Text = rsAlu.Fields("Nome").Value txtData.Text = rsAlu.Fields("Data Nascita").Value txtLuogo.Text = rsAlu.Fields("Luogo Nascita").Value txtClasse.Text = rsAlu.Fields("Classe").Value txtSezione.Text = rsAlu.Fields("Sezione").Value txtCorso.Text = rsAlu.Fields("Corso").Value End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdFine_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdFine.Click End End Sub End Class