Programmi Visual Basic - prof. Claudio Maccherani - Perugia - 2009
accesso a database (Access) in Visual Basic 6.0 con DAO (Data Access Objects)
applicazione
Alunni2
- 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
'+------------------------------------------------------------------------------------+ '| ALUNNI2 - applicazione VB6, esempio di gestione singola tabella | '| utilizzando recordset DAO (Data Access Objects) | '| (Prof.Claudio Maccherani) | '+------------------------------------------------------------------------------------+ Option Explicit ' per controllare la dichiarazione delle variabili Dim Segnalibro As Variant ' segnalibro per marcare il record corrente Dim Matricola As Long, Nome As String, Classe As Integer ' per la ricerca Dim FlagRic As Boolean ' flag per il controllo errore di Validate in caso di ricerca Dim wrkJet As Workspace ' area di lavoro del "motore" Jet Dim dbAlu As Database ' database alunni Dim rsAlu As Recordset ' recordset alunni '-------------------------------------------------------------------------------------- Private Sub Form_Load() ' 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 Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet) ' apre work area Set dbAlu = wrkJet.OpenDatabase(App.Path & "\Alunni.mdb", False, False, "") ' apre db Set rsAlu = dbAlu.OpenRecordset("Alunni", dbOpenTable) ' apre tabella End Sub '-------------------------------------------------------------------------------------- Private Sub Form_Activate() ' eseguito quando il form diventa attivo, dopo caricamento selIndexMatricola = True ' imposta il pulsante dell'indice matricola (indice primario) FlagRic = False ' imposta il flag della ricerca 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.Edit ' attiva l'editazione dei campi del record corrente 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.Index = "Matricola" ' attiva l'indice Matricola cmdFirst_Click ' si posiziona sul primo record (dell'indice attivato) End Sub '-------------------------------------------------------------------------------------- Private Sub selIndexNome_Click() ' pulsante di opzione NOME rsAlu.Index = "Nome" ' attiva l'indice Nome cmdFirst_Click ' si posiziona sul primo record (dell'indice attivato) End Sub '-------------------------------------------------------------------------------------- Private Sub selIndexClasse_Click() ' pulsante di opzione CLASSE rsAlu.Index = "Classe" ' attiva l'indice CLASSE cmdFirst_Click ' si posiziona sul primo record (dell'indice attivato) End Sub '-------------------------------------------------------------------------------------- Private Sub cmdRicerca_Click() ' pulsante RICERCA If rsAlu.BOF And rsAlu.EOF Then Exit Sub ' se la tabella è vuota, esce End If FlagRic = True ' imposta il flag per i controlli del validate Segnalibro = rsAlu.Bookmark ' imposta il segnalibro su record corrente ' imposta la ricerca in base all'indice corrente If selIndexMatricola Then ' se l'indice corrente è Matricola ' richiede la matricola da cercare Matricola = InputBox("Matricola da cercare (>=)") ' si posiziona sulla prima matricola > o = a quella data rsAlu.Seek ">=", Matricola ElseIf selIndexNome Then ' se l'indice corrente è Nome ' richiede il nome da cercare Nome = InputBox("Nome da cercare (>=)") ' si posiziona sul primo nome > o = a quello dato rsAlu.Seek ">=", Nome ElseIf selIndexClasse Then ' se l'indice corrente è Classe ' richiede la classe da cercare Classe = InputBox("Classe da cercare (>=)") ' si posiziona sulla prima classe > o = a quella data rsAlu.Seek ">=", Classe End If ' dopo aver fatto la ricerca, sopra, con il metodo SEEK ' si controlla se essa ha avuto esito positivo o negativo If rsAlu.NoMatch Then ' esito negativo, già segnalato da VB rsAlu.Bookmark = Segnalibro ' si riposiziona sul precedente record End If FlagRic = False ' reimposta il flag per i controlli del validate 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 '--------------------------------------------------------------------------------------