Programmi Visual Basic - prof. Claudio Maccherani - Perugia - 2009
accesso a database (Access) in Visual Basic 6.0 con ADO (ActiveX Data Object)
applicazione
Alunni4
- 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
'+------------------------------------------------------------------------------------------+ '| ALUNNI4 - applicazione VB6, esempio di gestione singola tabella | '| utilizzando recordset ADO (ActiveX Data Object) | '| (Prof.Claudio Maccherani) | '+------------------------------------------------------------------------------------------+ Option Explicit ' per controllare la dichiarazione delle variabili Dim Matricola As Long, Nome As String, Classe As Integer ' per la ricerca Dim Segnalibro As Variant ' segnalibro per marcare il record corrente Dim stConnection As String ' stringa di connessione Dim stSql As String ' stringa comando Sql Dim cnAlu As New ADODB.Connection ' connessione alunni Dim rsAlu As New ADODB.Recordset ' recordset alunni '-------------------------------------------------------------------------------------------- Private Sub Form_Load() ' viene eseguito al momento del caricamento in memoria del form ' al caricamento si possono impostare le proprietà dei controlli ' la proprietà Path dell'oggetto App restituisce il percorso dell'applicazione stConnection = "Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & App.Path & "\Alunni.mdb" cnAlu.Open stConnection ' apre la connessione al database Access 97 stSql = "Select * From Alunni" rsAlu.Open stSql, stConnection, adOpenKeyset, adLockPessimistic ' apre la tabella alunni End Sub '-------------------------------------------------------------------------------------------- Private Sub Form_Activate() ' viene eseguito all'attivazione del form, dopo il caricamento selIndexMatricola = True ' imposta il pulsante dell'indice matricola (indice primario) Call cmdFirst_Click ' legge il primo End Sub '-------------------------------------------------------------------------------------------- Private Sub 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() ' 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() ' 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() ' 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() ' pulsante NUOVO rsAlu.AddNew ' aggiunge un record vuoto MsgBox "Inserisci i campi e memorizzali con SALVA !" txtMatricola.SetFocus ' posiziona il cursore sulla matricola End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdSalva_Click() ' 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("Matricola") = Val(txtMatricola): rsAlu("Nome") = txtNome rsAlu("Data Nascita") = CDate(txtData): rsAlu("Luogo Nascita") = txtLuogo rsAlu("Classe") = Val(txtClasse): rsAlu("Sezione") = txtSezione: rsAlu("Corso") = txtCorso rsAlu.Update ' registra il record corrente MsgBox "Record variato/registrato !" End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdCanc_Click() ' 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 ?", vbYesNo) = vbYes Then rsAlu.Delete ' cancella il record corrente cmdNext_Click ' si posiziona sul record successivo End If End If End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdFine_Click() ' pulsante FINE End ' chiusura programma End Sub '-------------------------------------------------------------------------------------------- Private Sub selIndexMatricola_Click() ' pulsante di opzione MATRICOLA rsAlu.Close: stSql = "Select * From Alunni Order by Matricola" rsAlu.Open stSql, stConnection, adOpenKeyset, adLockPessimistic rsAlu.Requery ' aggiorna il recordset rieseguendo la query cmdFirst_Click ' si posiziona sul primo record (dell'indice attivato) End Sub '-------------------------------------------------------------------------------------------- Private Sub selIndexNome_Click() ' pulsante di opzione NOME rsAlu.Close: stSql = "Select * From Alunni Order by Nome" rsAlu.Open stSql, stConnection, adOpenKeyset, adLockPessimistic rsAlu.Requery ' aggiorna il recordset rieseguendo la query cmdFirst_Click ' si posiziona sul primo record (dell'indice attivato) End Sub '-------------------------------------------------------------------------------------------- Private Sub selIndexClasse_Click() ' pulsante di opzione CLASSE rsAlu.Close: stSql = "Select * From Alunni Order by Classe" rsAlu.Open stSql, stConnection, adOpenKeyset, adLockPessimistic rsAlu.Requery ' aggiorna il recordset rieseguendo la query cmdFirst_Click ' si posiziona sul primo record (dell'indice attivato) End Sub '-------------------------------------------------------------------------------------------- Private Sub cmdRicerca_Click() ' pulsante RICERCA Dim stCriterio As String: stCriterio = "": If rsAlu.BOF And rsAlu.EOF Then Exit Sub Segnalibro = rsAlu.Bookmark ' imposta il segnalibro If selIndexMatricola Then ' se l'indice corrente è Matricola Matricola = InputBox("Matricola da cercare (>=)") stCriterio = "Matricola >= " & CStr(Matricola) ElseIf selIndexNome Then ' se l'indice corrente è Nome Nome = InputBox("Nome da cercare (>=)") stCriterio = "Nome >= '" & Nome & "'" ElseIf selIndexClasse Then ' se l'indice corrente è Classe Classe = 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 If rsAlu.EOF Then rsAlu.Bookmark = Segnalibro ' si riposiziona sul record precedente Call Visualizza_Record ' visualizza il record End If End Sub '-------------------------------------------------------------------------------------------- Private Sub Visualizza_Record() ' visualizzazione record corrente txtMatricola = rsAlu("Matricola"): txtNome = rsAlu("Nome") txtData = rsAlu("Data Nascita"): txtLuogo = rsAlu("Luogo Nascita") txtClasse = rsAlu("Classe"): txtSezione = rsAlu("Sezione"): txtCorso = rsAlu("Corso") End Sub '--------------------------------------------------------------------------------------------