Il passo successivo nella realizzazione della nostra applicazione è la definizione delle funzioni di modifica e di aggiunta di informazioni nell'agenda. Vediamo prima la modifica. Vogliamo fare in modo che, quando l'utente preme il tasto Modifica, la Caption del pulsante cambi in Annulla e venga visualizzato il pulsante Salva; premendo quest'ultimo le modifiche devono essere salvate nel database, mentre facendo clic sul pulsante Annulla i cambiamenti devono essere annullati. Ancora una volta, utilizzando i metodi dell'oggetto Recordset queste operazioni possono essere svolte molto semplicemente. Il codice che deve essere eseguito alla pressione del tasto Modifica è il seguente:
Private Sub Command3_Click()
If Command3.Caption = "Modifica" Then
'Attiva la funzione di modifica.
Data1.Recordset.Edit
Command3.Caption = "Annulla"
Command6.Visible = true
Else
'Annulla le modifiche.
Data1.Recordset.CancelUpdate
Command6.Visible = False
Command3.Caption = "Modifica"
End If
End Sub
Innanzi tutto viene controllata la Caption del pulsante: se è "Modifica", richiama il metodo Edit per attivare la funzione di modifica; fatto questo, imposta la Caption su "Annulla" e mostra il pulsante Salva. Viceversa, se la Caption è "Annulla", annulla le eventuali modifiche utilizzando il metodo CancelUpdate, nasconde il pulsante Salva e reimposta la Caption su "Modifica". Ora dobbiamo scrivere il codice che verrà eseguito alla pressione del tasto Salva:
Private Sub Command6_Click()
'Salva le modifiche.
Data1.Recordset.Update
Command6.Visible = False
Command3.Caption = "Modifica"
End Sub
Il metodo Update salva le modifiche nel database; successivamente il pulsante Salva viene nascosta e Caption del pulsante Modifica viene reimpostata.
A questo punto abbiamo scritto il codice necessario alla modifica dei dati; tuttavia c'è ancora una situazione che non abbiamo previsto: è possibile che l'utente faccia clic sulle frecce di navigazione del controllo Data durante un'operazione di modifica; in questo caso vogliamo che compaia una finestra per confermare il salvataggio. L'evento che utilizzeremo è l'evento Validate del controllo Data, che viene generato, tra gli altri casi, prima che un record diventi il record corrente e prima del metodo Update. Ecco il codice:
Private Sub Data1_Validate(Action As Integer, Save As Integer)
Dim Risposta As Integer
If Save = true Then
'E' stato modificato un contatto.
Risposta = MsgBox("Salvare le modifiche apportate?", vbQuestion + vbYesNo, Me.Caption)
If Risposta = vbNo Then
'Se si seleziona no, annulla le modifiche.
'Per questo, la proprietà DataChanged delle TextBox viene impostata su False.
Text1.DataChanged = False
Text2.DataChanged = False
Text3.DataChanged = False
Text4.DataChanged = False
End If
End If
'Nasconde il pulsante "Salva".
Command6.Visible = False
Command3.Caption = "Modifica"
End Sub
Analizziamo questa routine. L'evento Validate ha due parametri, Action e Save: il primo identifica l'operazione che ha generato l'evento (consultate la Guida in linea per maggiori informazioni), mentre il secondo contiene un valore booleano che determina se i dati sono stati modificati. Innanzi tutto controlliamo se il valore di Save è true, cioè se è stata fatta qualche modifica; in tal caso, visualizziamo una finestra che chiede all'utente di confermare il salvataggio.
Per fare questo utilizziamo nuovamente la MsgBox, ma ora in un modo diverso; il secondo argomento della funzione è vbQuestion + vbYesNo, ovvero è la somma di due costanti: la prima indica che vogliamo visualizzare l'icona di richiesta (un punto interrogativo), mentre la seconda fa in modo che nella finestra vengano visualizzati i pulsanti Sì e No.
A questo punto sorge una domanda: come si recupera la scelta dell'utente, cioè come si può sapere su quale dei due pulsanti è stato fatto clic? Abbiamo detto più volte che la MsgBox è una funzione e, quindi, come tale, restituisce un valore; il valore restituito dalla funzione è memorizzato nella variabile Risposta e, nel nostro programma, può essere vbYes (l'utente ha selezionato Sì) oppure vbNo (è stato selezionato No). In quest'ultimo caso le modifiche vengono annullate ponendo la proprietà DataChanged delle caselle di testo su False (per maggiori informazioni, si consiglia come sempre di consultare la Guida in linea). Le ultime due istruzioni dell'evento Validate nascondono il pulsante Salva e reimpostano la Caption del pulsante Modifica.
Potete scaricare il programma con le funzioni di ricerca e di modifica dei dati facendo clic qui.