Access
 sql >> Database >  >> RDS >> Access

Visual Basic per applicazioni in Microsoft Access

Introduzione

Microsoft Access include una serie di funzionalità per consentire agli sviluppatori di database di creare moduli di immissione dati, report e query che possono guidare gli utenti nell'esecuzione di query sui dati esistenti nel database e nell'immissione di nuovi dati. Vari strumenti di creazione di query e procedure guidate facilitano questo processo di sviluppo. Anche con questi strumenti, tuttavia, potrebbero verificarsi situazioni in cui lo sviluppatore vorrebbe aggiungere ancora più funzionalità non già fornite dagli strumenti di sviluppo di MS Access. Ad esempio, lo sviluppatore potrebbe voler correggere automaticamente i dati non validi prima che vengano salvati nel database, mostrare un avviso in caso di violazione di una regola aziendale, aiutare l'utente a navigare da un modulo di immissione dati all'altro o avviare un rapporto con alcuni filtri personalizzati. Il modo per realizzare tale personalizzazione consiste nell'aggiungere codice utilizzando il linguaggio di programmazione Visual Basic, Applications Edition.

Visual Basic, Applications Edition (VBA) è il linguaggio di programmazione utilizzato nella famiglia di prodotti software Microsoft Office come Excel e Access. Il linguaggio VBA deriva dal linguaggio "Base" inventato nel 1964 che divenne popolare sui personal computer negli anni '70. La parte "Visuale" del nome è stata aggiunta da Microsoft per riflettere l'uso del linguaggio di programmazione Basic in Microsoft Windows.

Ci sono molti tutorial che introducono la programmazione di base. Questo tutorial si concentrerà su un piccolo sottoinsieme di funzionalità del linguaggio VBA utilizzato in MS Access.

Contenuti

  • Eventi in Microsoft Access
  • Esempio di codice VBA:assicurarsi che i nomi siano in un caso appropriato
  • Il linguaggio VBA:dichiarazione e assegnazione a variabili, dichiarazioni condizionali e commenti
  • Il linguaggio VBA:funzioni, metodi ed esempi
  • Il linguaggio VBA – Proprietà
  • Esercizi di codifica VBA
  • Gestione degli errori in VBA
  • Esecuzione di query SQL personalizzate in VBA

La pagina successiva introduce gli eventi in Microsoft Access.

Eventi in Microsoft Access

In Access, il codice di programmazione VBA è allegato a moduli e report e può essere impostato per essere eseguito in un momento specifico o in reazione a un evento specifico. Questo stile di programmazione viene talvolta definito programmazione "basata su eventi", il che significa che il codice scritto dallo sviluppatore verrà eseguito in risposta ad alcuni eventi .

Quando un modulo viene visualizzato in Visualizzazione modulo, in genere esegue una query su tutti i dati esistenti dalle tabelle sottostanti e quindi rimane inattivo finché l'utente non fa qualcosa. Ad esempio, l'utente può fare clic su uno dei pulsanti di navigazione per passare al record successivo, fare clic in una casella di testo e iniziare a digitare alcuni nuovi dati oppure fare clic sul pulsante Chiudi per chiudere il modulo. Ognuna di queste azioni si traduce in un Evento accade nella forma. Ogni clic del mouse o tratto della tastiera viene gestito come un evento.

Per la maggior parte, gli eventi hanno un comportamento predefinito. Cliccando sul pulsante di navigazione “record successivo” il modulo scorre al record di dati successivo. Digitando la lettera "C" quando il cursore si trova in una casella di testo, nella casella di testo viene visualizzata la lettera "C". Premendo il tasto TAB il cursore passa alla casella di testo (o al controllo) successivo del form e così via. Un programmatore può ignorare o migliorare questo comportamento predefinito e inserire il proprio codice da eseguire in risposta all'evento.

La programmazione VBA su moduli di accesso e report si concentra principalmente sulla scrittura di codice per rispondere a diversi eventi.

Prima di addentrarci nei dettagli degli eventi, può essere istruttivo implementare un semplice esempio. Per vedere del codice in azione, la sezione successiva di questo tutorial fornisce una procedura dettagliata per l'aggiunta di codice VBA a un modulo di immissione dati.

Esempio di codice VBA:assicurarsi che i nomi siano nel caso corretto

Quello che segue è un esempio relativamente breve e semplice di aggiunta di codice VBA a un modulo di immissione dati in MS Access. Per brevità verranno saltati diversi dettagli. Dopo questo esempio, il resto di questo tutorial inserirà questi dettagli.

Questo esempio utilizza il Cliente modulo di immissione dati personalizzato nell'esercitazione Advanced MS Access Forms. Potresti voler completare quel tutorial (o almeno le parti relative al modulo di inserimento dati del cliente) prima di continuare.

Quando inseriamo le informazioni di un nuovo cliente, vorremmo assicurarci che i nomi del cliente siano inseriti nel "caso corretto". Cioè, la prima lettera del nome dovrebbe essere una lettera maiuscola e il resto del nome dovrebbe essere in minuscolo. Se l'utente inserisce:"joe" vorremmo che il modulo correggesse automaticamente questo caso:"Joe".

In termini di Eventi, aggiungeremo il codice collegato all'evento Dopo l'aggiornamento per il campo Nome nel modulo del cliente. Ciò significa che dopo qualcosa è stato modificato (aggiornato ) nel campo Nome, verrà attivato l'evento After Update e quindi il codice che scriveremo entrerà in azione per assicurarsi che il nome digitato venga convertito in maiuscolo corretto.

I seguenti passaggi mettono in atto questo codice.

  1. Apri l'immissione dei dati del cliente in modalità Progettazione.
  2. Fai clic con il pulsante destro del mouse su Nome casella di testo e seleziona Proprietà dal menu a comparsa.
  3. Quando il foglio di proprietà viene visualizzato, fare clic sulla scheda Evento. Questo è mostrato nella figura seguente:

    Prendere nota dell'elenco degli eventi visualizzati. Ognuno può essere programmato per rispondere all'evento specifico che accade al Nome casella di testo.

  4. Crea un nuovo gestore di eventi facendo clic sui tre punti a destra dell'evento After Update.
  5. Il Scegli Builder apparirà la finestra. Seleziona Generatore di codice e quindi fare clic su OK pulsante.
  6. Apparirà la finestra di modifica del codice VBA. Si noti che Access ha già creato lo stub della subroutine che inizia con le parole Private Sub e termina con le parole End Sub.
    Il nome della subroutine viene creato utilizzando il nome del controllo form (FirstName) e il nome del Evento a cui risponderà questa subroutine (AfterUpdate).

    La riga End Sub è dove finirà questa particolare subroutine.

  7. Aggiungi il seguente codice sulla riga vuota tra Private Sub e End Sub.:
    FirstName = StrConv(FirstName, vbProperCase)
    
    

    Una volta completato, il codice apparirà come segue:

    Questa nuova riga di codice esegue le seguenti operazioni:

    StrConv è una funzione che accetta il contenuto della casella di testo FirstName e lo converte in base al secondo parametro indicato, che in questo esempio è vbProperCase. Al termine di questa conversione, il risultato verrà riassegnato (usando il segno di uguale) alla casella di testo FirstName. Questo sovrascriverà tutto ciò che è attualmente nella casella di testo FirstName. Ad esempio, questa funzione prenderà "Sally", lo convertirà in "Sally" e quindi inserirà "Sally" nella casella di testo Nome.

  8. Salva questo nuovo codice aprendo il File menu e selezionando Salva .
  9. Testare il nuovo codice. Torna alla schermata della modalità di progettazione di Microsoft Access. Cambia la visualizzazione in Visualizzazione modulo.
  10. Vai a un record vuoto. Fare clic sul campo Nome e digitare un nome in tutte le lettere minuscole:

  11. Premi la scheda tasto per passare alla casella di testo successiva. Il nome di Joe dovrebbe essere cambiato in "Joe" come mostrato di seguito:
  12. Se ricevi un errore, torna all'editor di codice VBA e assicurati di aver digitato correttamente tutte le parti del codice. Potrebbe essere necessario abbassare il pulsante Esegui menu e seleziona Ripristina per interrompere l'esecuzione del codice VBA.

L'esempio precedente ha fornito una rapida occhiata a come è possibile personalizzare il comportamento di un modulo per aiutare l'utente a inserire dati ben formattati nel database. Diversi dettagli sono stati ignorati durante questo esempio e tali dettagli verranno discussi nel resto di questo tutorial.

Il linguaggio VBA

Questa sezione introduce brevemente le parti principali del linguaggio VBA utilizzato in MS Access. Una panoramica completa di VBA va oltre lo scopo di questo tutorial. Alla fine di questo tutorial sono forniti riferimenti a libri e materiali più completi.

Dichiarazione di variabili

Una variabile è un nome dato a un segnaposto in cui il programmatore può memorizzare alcuni dati. Ad esempio, una variabile potrebbe essere utilizzata per memorizzare un numero mentre eseguiamo alcune operazioni matematiche su di esso o ne confrontiamo il valore con altre variabili. È possibile dichiarare che le variabili contengano valori di un tipo di dati specifico come numeri interi, stringhe o date. Per dichiarare una nuova variabile, utilizzare l'istruzione Dim. Ad esempio, per dichiarare una nuova variabile denominata MyName e impostalo per contenere una stringa (caratteri), procedi come segue:

Dim strMyName As String

Per dichiarare una nuova variabile denominata "AccountBalance" e configurarla per memorizzare un numero con un decimale, utilizzare quanto segue:

Dim dblAccountBalance come doppio

Assegnazione di valori

Un valore può essere assegnato a una variabile oa un controllo sulla maschera utilizzando il segno di uguale. Ad esempio, per memorizzare il nome "Alex" nella variabile MyName, utilizzare quanto segue:

strMyName =“Alex”

Per copiare il contenuto della casella di testo FirstName nella variabile MyName, utilizzare:

strMyName =[Nome]

I valori possono anche essere calcolati prima di essere assegnati. Ad esempio, la seguente espressione prende il saldo del conto del cliente corrente dalla casella di testo [Saldo], aggiunge l'1% di interesse (moltiplicando il saldo per 1,01) e quindi riduce il risultato di $ 10. Infine, il risultato viene assegnato alla variabile AccountBalance.

dblAccountBalance =( [Saldo] * 1.01 ) – 10.00

Dichiarazioni condizionali

Un'istruzione condizionale utilizza un test logico per determinare quali righe di codice eseguire successivamente. L'istruzione condizionale If... Then viene usata abbastanza frequentemente. Ad esempio:

If AccountBalance < 1000 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

Viene valutata l'espressione logica AccountBalance <1000. Se questa espressione è vera (ad esempio se AccountBalance è $ 400), viene eseguita la riga successiva dopo Then. In questo esempio, tariffa mensile =10.

Se questa espressione è False, viene eseguita la riga dopo Else.

L'espressione logica può includere diverse parti collegate dagli operatori booleani OR, AND e NOT. Una discussione più approfondita delle espressioni booleane può essere trovata in questo tutorial di programmazione. Ad esempio, supponiamo di rinunciare al canone mensile se il conto ha meno di un anno. Supponiamo di avere AccountAge come età dell'account in mesi. Quindi il codice sarebbe:

If AccountBalance < 1000 AND AccountAge > 12 Then
      MonthlyFee = 10
Else
      MonthlyFee = 0
End If

È possibile eseguire più righe di codice nelle istruzioni If... Then e If... Then possono essere nidificate l'una nell'altra.

Commenti

Quando si programma in qualsiasi linguaggio di programmazione, è buona norma includere commenti che descrivono il codice. In VBA un commento può essere incluso iniziando con una singola virgoletta. Prendendo come esempio quanto sopra, potremmo aggiungere i seguenti commenti:

Altre parti del linguaggio VBA sono discusse nella pagina successiva.

Lingua VBA – Continua

Funzioni

Il linguaggio VBA ha un gran numero di funzioni e metodi integrati che possono essere utilizzati per svolgere vari compiti come funzioni matematiche (sin, cos, tan), funzioni di stringa e molti altri. Le funzioni in genere hanno uno o più parametri di input utilizzati dalla funzione. Ad esempio, nella funzione Cos(45) il “45” è l'angolo di input su cui la funzione coseno funzionerà. La funzione StrConv richiede due parametri di input:la stringa da convertire e lo stile di conversione:

StrConv(Nome, vbProperCase)

Alcune utili funzioni includono:

MsgBox( prompt, pulsanti, titolo) Visualizza una finestra di messaggio pop-up con il testo, i pulsanti e il titolo del prompt
StrConv( espressione, stile ) Convertire l'espressione stringa in maiuscolo, minuscolo o proprio
Sinistra( espressione, caratteri ) Prendi la maggior parte dei caratteri a sinistra dall'espressione stringa
Mid( espressione, inizio, caratteri ) Prendi il set centrale di caratteri dall'espressione stringa a partire dall'inizio
ÈNull( espressione ) Verifica se l'espressione stringa (o la casella di testo) non ha contenuto (è null)
Nz( espressione, valore_se_null ) Se l'espressione è nulla, inserisci un valore predefinito
Ora() Restituisce la data e l'ora correnti
Round(espressione, decimali ) Arrotonda l'espressione numerica a un certo numero di cifre decimali
RGB( rosso, verde, blu ) Restituisce il colore intero in base a una combinazione di rosso, verde e blu

Metodi

I metodi in VBA sono come funzioni ma sono collegati a un controllo o altro oggetto su una maschera o un report.

Alcuni metodi utili includono:

DoCmd.CancelEvent Annulla l'evento corrente che viene gestito
DoCmd.Chiudi Chiudi il modulo (o database) corrente
DoCmd.OpenForm Apre un nuovo modulo
DoCmd.OpenReport Esegui un comando MS Access come salvare dati nuovi o aggiornati, annullare una modifica o uscire da un modulo
.SetFocus Imposta il focus sul controllo del form
.Annulla Annulla la modifica o il comando più recenti
.Aggiorna Aggiorna tutti i dati sottostanti un modulo
.Richiesta Richiede i dati forniti a un modulo
.Ridipingi Ridisegna tutti i controlli su un modulo

Molte altre funzioni e metodi sono elencati in questo sito Microsoft.

Il seguente insieme di esempi fa uso di varie funzioni e metodi in diverse combinazioni.

Esempi

Mostra all'utente un avviso se il saldo dell'account è inferiore a $ 1.000

If AccountBalance < 1000 Then
      MsgBox("Warning: The Account Balance is now less than $1,000.")
End If

Se la casella di testo FirstName nel modulo contiene qualcosa, convertilo in maiuscolo corretto

If Not IsNull( [FirstName] ) Then
   FirstName = StrConv( [FirstName], vbProperCase )
End If

la pagina successiva introduce le proprietà di diversi oggetti.

Proprietà

Ciascun elemento di un modulo di immissione dati o di un report ha un insieme di proprietà ad esso associato. Le proprietà controllano il posizionamento, il colore, il carattere, lo sfondo e altri attributi di aspetto e formattazione di ciascun controllo. Ad esempio, alcune delle numerose proprietà di un TextBox includono:

Visibile Determina se la casella di testo è visibile nel modulo
Bloccato Determina se i dati nella casella di testo possono essere modificati
Indice delle schede L'ordine di ogni controllo mentre l'utente naviga nel modulo premendo Tab
Etichetta Identifica il nome dell'etichetta associata alla casella di testo
Larghezza, altezza, posizione superiore e inferiore Indica la posizione relativa e la dimensione della casella di testo
Stile e colore dello sfondo Imposta lo stile di sfondo e il colore della casella di testo
Stile bordo e colore Imposta lo stile e il colore del bordo attorno alla casella di testo
Dimensione carattere, peso, sottolineato, corsivo, colore e allineamento Imposta il carattere e lo stile
Spaziatura margini e spaziatura interna:imposta i margini e la spaziatura interna attorno alla casella di testo

Le proprietà possono essere impostate utilizzando la Visualizzazione Progettazione e salvate con il modulo o il report. Le proprietà possono anche essere modificate utilizzando il codice VBA mentre il modulo è in esecuzione. Per accedere a una proprietà in VBA, utilizzare il nome del controllo, quindi un punto e quindi il nome della proprietà. Ad esempio, il codice seguente modifica il colore del carattere della casella di testo CustomerID in rosso:

IDCliente.ForeColor =vbRed

Le sezioni che seguono forniscono alcuni esercizi che combinano diverse parti del linguaggio di programmazione VBA per personalizzare il comportamento di vari moduli di immissione dati.

Esercizi sul codice VBA

Prova i seguenti esercizi per personalizzare i moduli. Fare riferimento alle sezioni precedenti per esempi di codice che possono essere adattati per adattarsi all'esercizio corrente.

Esercizio 1

Modificare il modulo CustomerDataEntry per aggiungere due gestori di eventi AfterUpdate che convertiranno il nome e il cognome in maiuscolo corretto (creare un gestore AfterUpdate separato per ogni casella di testo). Scrivi il codice per verificare che la casella di testo non sia nulla prima di tentare di convertire il testo.

Esercizio 2

Modificare il modulo AccountsDataEntry per aggiungere un gestore di eventi AfterUpdate che visualizzerà una finestra di messaggio di avviso se il saldo dell'account è inferiore a $ 5.000. Trasforma anche in rosso il colore del carattere della casella di testo Saldo.

Esercizio 3

Modifica il modulo di inserimento dati cliente. Creare una subroutine On Lost Focus che trasforma l'etichetta per la casella di testo FirstName in rosso (vbRed) se l'utente lascia la casella di testo FirstName senza digitare nulla. Imposta l'etichetta su blu (vbBlue) se c'è qualcosa nella casella di testo. Nell'esempio seguente non è stato digitato nulla nella casella di testo FirstName, quindi l'utente è passato alla casella di testo successiva facendo diventare rossa l'etichetta FirstName.

La pagina successiva di questo tutorial illustra come gestire gli errori nel codice VBA.

Gestione degli errori in VBA

Di tanto in tanto il codice VBA riscontrerà un errore. Ad esempio, se una casella di testo è vuota e si tenta di convertire il contenuto della casella di testo in maiuscolo corretto, la funzione StrCnv avrà esito negativo. Un altro esempio è quando avviene la divisione per zero. Senza la gestione degli errori, questi problemi possono causare l'arresto anomalo del programma VBA. Quando si verifica un errore, un codice speciale può entrare in azione per gestire l'errore e continuare a elaborare il codice VBA.

Le due principali funzionalità di gestione degli errori di VBA sono l'istruzione On Error Goto e l'istruzione Resume Next. Queste due istruzioni di codice VBA interagiscono per impedire a VBA di arrestare in modo anomalo l'applicazione.

L'istruzione On Error Goto informa VBA su cosa fare quando si verifica un errore in una subroutine. La parte Goto dell'istruzione fa riferimento a un'etichetta altrove nel codice in cui VBA continuerà a funzionare. Una volta che il programma VBA arriva all'etichetta, qualsiasi errore verrà visualizzato in un oggetto chiamato Err. La proprietà Err.Description conterrà una descrizione testuale dell'ultimo errore riscontrato. L'istruzione Resume Next farà sì che il programma VBA continui a essere eseguito dal punto in cui si è verificato l'errore.

L'esempio seguente espande la routine FirstName_AfterUpdate introdotta all'inizio di questa esercitazione. Ora il programma VBA può gestire eventuali errori che possono verificarsi nel programma.

Private Sub FirstName_AfterUpdate
     ' Subroutine to convert the FirstName of the customer to Proper Case
    On Error Goto FirstName_AfterUpdate_Error_Handler
     FirstName = StrConv(FirstName, vbProperCase)
     ' If the conversion was successful, exit this subroutine
     Exit Sub
FirstName_AfterUpdate_Error_Handler:
       ' If there is an error show the description of the error
      MsgBox Err.Description
      ' Resume with the next statement In the subroutine
     Resume Next
End Sub

la sezione successiva di questo tutorial illustra come includere il codice SQL in VBA.

Esecuzione di query SQL personalizzate in VBA

Structured Query Language (SQL) è il linguaggio di programmazione utilizzato nei database relazionali come MS Access, SQL Server, Oracle e molti altri. Le istruzioni SQL possono essere utilizzate per inserire, aggiornare, eliminare e recuperare (selezionare) record di dati dalle tabelle (tra molte altre abilità). Un semplice esempio di istruzione SQL potrebbe essere:

SELECT customerid, firstname, lastname
FROM  customer

Il codice SQL può essere scritto all'interno di VBA ed eseguito al momento opportuno. Ad esempio, è possibile scrivere una subroutine VBA per interrogare la tabella Customer per trovare l'ID cliente più alto. Quindi potremmo aggiungere 1 a questo numero per ottenere un nuovo CustomerID non utilizzato per un nuovo record.

I passaggi generali per svolgere questo tipo di attività sono:

Crea un'istruzione SQL

Eseguire l'istruzione SQL utilizzando la connessione al database aperta (denominata CurrentDb in VBA)

Recupera i record risultanti e utilizza i dati recuperati

Per creare questa subroutine VBA, apri il modulo CustomerDataEntry e ottieni le proprietà del campo CustomerID. Nella scheda eventi, fai clic sui tre punti a destra dell'evento On Dbl Click. Scegli Code builder e lo stub verrà creato come segue:

Private Sub CustomerID_DblClick(Cancel As Integer)

End Sub

Aggiungi il seguente codice:

Private Sub CustomerID_DblClick(Cancel As Integer)
    ' Create a new CustomerID when user double-clicks in the CustomerID field
    On Error GoTo ErrorHandler
    Dim rstResults As Recordset ' This will hold the set of result records
    Dim strSQL As String        ' This variable will hold the text of the SQL Statement
    ' If there is nothing in the CustomerID text box
    If IsNull(CustomerID) Then
       ' Make the SQL statement
       strSQL = "SELECT MAX(customerid) + 1 AS NewID FROM customer"
       ' Run the SQL query against the current database
       Set rstResults = CurrentDb.OpenRecordset(strSQL)
       ' If at least 1 record is returned
       If rstResults.EOF = False Then
          ' Assign the NewID to the CustomerID field
          CustomerID = rstResults!NewID
       End If

        rstResults.Close              ' Close up the result set
       Set rstResults = Nothing      ' Empty out the result set
    End If
    Exit Sub

ErrorHandler:
    Set rstResults = Nothing
End Sub

Il codice apparirà come il seguente una volta che è tutto a posto:

Salvare il file e quindi visualizzare il modulo CustomerDataEntry. Passare a un nuovo record e quindi fare doppio clic nel campo CustomerID. Dovrebbe essere creato automaticamente un nuovo CustomerID.