Convalidare dati complessi con il VBA
Impariamo come convalidare da codice dati complessi con il VBA Visual Basic for Application
Il VBA è un linguaggio potente che comprende molte funzioni intrinseche che si possono utilizzare per verificare e convalidare i dati.
Sebbene, per lo più, la convalida dei dati venga gestita per mezzo di semplici espressioni di regole di convalida nelle tabelle e nelle maschere, si può, quando è necessario, creare una routine di convalida per analizzare e convalidare dati complessi.
Un esempio nel database Entertainment è costituito dalla stringa di testo Days/Times, che esiste sia nella tabella tblClubs sia nella tabella tblContracts.
Nel record di un club, la stringa definisce i giorni e le ore “predefiniti” per i quali normalmente il club prenota lo spettacolo.
Quando si seleziona un nuovo club nella maschera frmContracts, una procedura nell’eventoDopo aggiornamento della casella combinata ClubID copia questa informazione nel contratto.
Tuttavia, per ciascun contratto, i giorni e le ore in cui il gruppo prenotato dovrà esibirsi potrebbero essere diversi da queffi predefiniti per il club.
Dal momento che questo è un campo che va a finire nel contratto di prenotazione del gruppo e delclub, è necessario convalidare l’esattezza dei giorni della settimana.
Inoltre, ledate iniziali e finali del contratto devono corrispondere al testo Days/Times. Possiamo aprire un contratto e tentare di introdurre un giorno non valido nella stringa Days/Times.
Quando si immette una stringa non valida (ad esempio una stringa vuota), si dovrebbe vedere un messaggio di errore come quello che appare nella figura (figura 1).
La funzione ValDaysTimes nel modulo chiamato modRMP fornisce questa convalida.
Essa non soltanto verifica che sia valida l’ortografia dei giorni della settimana, ma si accerta anche che la stringa abbia la seguente forma:
nomegiorno[-nomegiorno][ore prenotazione][;nomegiorno[-nomegiorno][ore prenotazione]...]
Vale a dire che la stringa deve cominciare con il nome di un giorno valido. Si può specificare un intervallo di giorni per le stesse ore di prenotazione, inserendo un trattino e un secondo nome di giorno.
Ogni gruppo successivo di giorni di prenotazione deve essere delimitato da un punto e virgola.
Inoltre, la funzione ValDaysTimes calcola il giorno della settimana per il primo giorno e per l’ultimo giorno che trova nella stringa di prenotazione e restituisce i valori basandosi suLunedì come primo giorno della settimana.
Se l'ultimo giorno cade nella settimana prima del primo, la funzione presume che le date di prenotazione comprendano un fine settimana e aggiunge 7 alla data finale per indicare questo fatto.
Ecco il codice VBA nella routine evento Prima di aggiornare della stringa Days/Times:
Private Sub ContractDaysTimes_BeforeUpdate(Cancel As Integer)
Dim intReturn As Integer, intFirst As Integer, intLast As Integer
intReturn = ValDaysTimes(Me!ContractDaysTimes, intFirst, intLast)
If Not intReturn Then
DoCmd.OpenForm "frmDaysTimesError"
Cancel = True
End If
Me!ContractFirstDay = intFirst
Me!ContractLastDay = intLast
End Sub
Si osservi che questa routine passa alla funzione variabili locali chiamate IntFirst e intLast, invece di passarle i campi del contratto.
VBA passa le variabili di controllo dellamaschera per valore, perciò queste non possono essere aggiornate direttamente dalla funzione chiamata.
Se l’analisi ha successo, la routine aggiorna il primo e l’ultimo giorno del contratto nel sottostante recordset del contratto stesso.
Come vedremo nei tutorials finali di questa sezione, questi valori dei giorni della settimana iniziali e finali vengono utilizzati da altre procedure VBA per convalidare i giorni di inizio e fine contratto.
Esempi di accesso ai dati con VBA Microsoft Access
Tutorials su Microsoft Access
Dr.Maurizio Cucchiara
autore del corso:
"Corso Base di Microsoft Access"
disponibile on line su questo sito
MC2 E-Learning S.a r.l.
Formazione per il Web
http://www.mc2.it/html/access.html
Cerca sul web con Google:
