Newsgroup: it.comp.appl.access
Titolo: [PER NEWBIE] - Analisi codice

Quella che segue è un'analisi del codice associato al pulsante - Esci
- della mia maschera
'frmAggiungiUtente'.
Il codice è stato testato e funziona perfettamente.
ABSTRACT:
Il codice che segue serve per gestire l'uscita da una maschera per
l'inserimento di dati
nel caso in cui l'utente voglia tornare ad una schermata precedente
(per esempio per visualizzare
i dati appena inseriti).
Il codice si deve preoccupare di:
1. chiedere all'utente se intende veramente uscire
2. chiedere all'utente di riempire correttamente i campi obbligatori
3. effettuare il requery del recordset della maschera chiamante
ESECUZIONE LOGICA:
SE (il campo NOME O il campo Cognome è NULL) O (il campo Nome o il
campo Cognome è vuoto) ALLORA
	scrivi un messaggio = "Annullare l'inserimento dei dati?"
	SE la risposta è SI ALLORA
		metti il FOCUS su frmSchedaPrimoContatto
		fai il REQUERY di frmSchedaPrimoContatto
		SE c'è ALMENO un record in tblUtenti ALLORA
			CHIUDI la maschera corrente
			APRI la maschera frmSchedaPrimoContatto
		ALTRIMENTI
			messaggio
			CHIUDI la maschera corrente
			APRI la maschera frmPannelloComandi
		FINE SE
	ALTRIMENTI
		SE il campo è Nome è NULLO ALLORA
			messaggio = "Inserisci il Nome dell'utente"
		ALTRIMENTI SE il campo Cognome è NULLO ALLORA
			messaggio = "Inserisci il Cognome dell'utente"
		FINE SE
	FINE SE
ALTRIMENTI
codice per aggiornare il recordset
FINE SE
CODICE:
Private Sub cmdEsci_Click()
On Error GoTo Err_cmdEsci_Click
---DICHIARAZIONI INUTILI-----
'Dim dbMIODB As DAO.Database
'Dim rsUtenti As DAO.Recordset
Dim stDocName As String
Dim stLinkCriteria As String
If (IsNull(Nome) Or IsNull(Cognome)) Or ((Nome.Value = "") Or
(Cognome.Value = "")) Then
    If MsgBox("Annullare l'inserimento del nuovo utente?", vbYesNo +
vbQuestion, "ATTENZIONE") = vbYes Then
        Forms!frmSchedaPrimoContatto.SetFocus
        Forms!frmSchedaPrimoContatto.Requery
        If DCount("*", "tblUtenti") > 0 Then
            DoCmd.Close acForm, "frmAggiungiUtente"
            DoCmd.OpenForm "frmSchedaPrimoContatto"
        Else
            MsgBox "Nessun contatto presente nel database." & Chr(13) &
Chr(10) & "Clicca su OK per tornare al Pannello Comandi",
vbInformation, "ATTENZIONE"
            DoCmd.Close acForm, "frmAggiungiUtente"
            DoCmd.OpenForm "frmPannelloComandi"
        End If
    Else
        If IsNull(Nome) Then
            MsgBox "Inserisci un nome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Nome].SetFocus
        ElseIf IsNull(Cognome) Then
            MsgBox "Inserisci un Cognome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Cognome].SetFocus
        End If
    End If
Else
        '---- ASSEGNAZIONI INUTILI------
        'Set dbMIODB = CurrentDb
        'Set rsUtenti = dbMIODB.OpenRecordset("tblUtenti")
        'Me.Requery
        'dbMIODB.Close
        stDocName = "frmSchedaPrimoContatto"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        Forms!frmSchedaPrimoContatto.SetFocus
        Forms!frmSchedaPrimoContatto.Requery
        DoCmd.Close acForm, "frmAggiungiUtente"
End If
Exit_cmdEsci_Click:
    Exit Sub
Err_cmdEsci_Click:
    MsgBox Err.Description
    Resume Exit_cmdEsci_Click
End Sub
------------------- ANALISI DEL CODICE: ------------------------------
1. la riga
On Error GoTo Err_cmdEsci_Click
specifica un'etichetta per la gestione degli errori. Salta alle righe:
Err_cmdEsci_Click:
    MsgBox Err.Description
    Resume Exit_cmdEsci_Click
in caso di presenza di un qualunque errore.
2. le righe
Dim stDocName As String
Dim stLinkCriteria As String
dichiarano delle variabili:
stDocname è una variabile di tipo stringa
stLinkCriteria è una variabile di tipo stringa
3. la riga
If (IsNull(Nome) Or IsNull(Cognome)) Or ((Nome.Value = "") Or
(Cognome.Value = "")) Then
effettua un duplice controllo sui campi Nome e Cognome (grazie Namor
per la dritta!!!), affinchè si verifichi
che non abbiano valore NULL oppure STRINGA VUOTA.
Se almeno uno dei due campi è vuoto, allora viene chiesto all'utente
se vuole annullare il processo di
inserimento dei dati in quel momento
4. la riga
If MsgBox("Annullare l'inserimento del nuovo utente?", vbYesNo +
vbQuestion, "ATTENZIONE") = vbYes Then
chiede all'utente se vuole annullare l'inserimento del nuovo utente.
Vengono usate le costanti visual basic
vbYes e vbNo associate alla MsgBox per controllare la risposta
dell'utente.
Nel caso che l'utente clicchi su SI allora viene eseguito il codice
	Forms!frmSchedaPrimoContatto.SetFocus
        Forms!frmSchedaPrimoContatto.Requery
        If DCount("*", "tblUtenti") > 0 Then
            DoCmd.Close acForm, "frmAggiungiUtente"
            DoCmd.OpenForm "frmSchedaPrimoContatto"
        Else
            MsgBox "Nessun contatto presente nel database." & Chr(13) &
Chr(10) & "Clicca su OK per tornare al Pannello Comandi",
vbInformation, "ATTENZIONE"
            DoCmd.Close acForm, "frmAggiungiUtente"
            DoCmd.OpenForm "frmPannelloComandi"
        End If
ovvero, dapprima viene spostato il focus su frmSchedaPrimoContatto, che
è la scheda dalla quale è stata
aperta frmAgiungiUtente, poi ne viene effettuato il requery del
recordset affinchè, nel caso il processo di
annullamento avvenga dopo l'inserimento in serie di n utenti, questi
siano immediatamente visibili nella
maschera che ha aperto frmAggiungiUtente.
Una volta affettuato il requery del recordset viene controllato che
nella tabella tblUtenti vi sia almeno un
record; nel caso ci sia viene aperta la Scheda Primo Contatto e chiusa
la maschera corrente; nel caso tblutenti
sia vuota viene visualizzato un messaggio di avviso, aperto il Pannello
Comandi e chiusa la maschera corrente.
Nel caso l'utente clicchi su NO allora viene eseguito il codice
	If IsNull(Nome) Then
            MsgBox "Inserisci un nome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Nome].SetFocus
        ElseIf IsNull(Cognome) Then
            MsgBox "Inserisci un Cognome valido", vbExclamation,
"ATTENZIONE"
            Forms![frmAggiungiUtente]![Cognome].SetFocus
ovvero, vengono controllati i campi Nome e Cognome. Se sono vuoti viene
mostrato un messaggio di avviso ed il
focus viene spostato su quello vuoto.
5. le righe
        stDocName = "frmSchedaPrimoContatto"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
        Forms!frmSchedaPrimoContatto.SetFocus
        Forms!frmSchedaPrimoContatto.Requery
        DoCmd.Close acForm, "frmAggiungiUtente"
infine, servono per
assegnare a stDocName il valore "frmSchedaPrimoContatto"
aprire frmSchedaPrimoContatto con il metodo OpenForm dell'oggetto DoCmd
spostare il focus su frmSchedaPrimoContatto
effettuare il requery di frmSchedaPrimoContatto in modo che i dati
aggiunti siano immediatamente visibili
chiudere la finestra corrente.
NOTA: ho commentato alcune parti che non servono (verificato). Non ho
idea del perchè ce le abbia messe; con
tutto 'sto codice sto impazzendo :)
---------------------------------- FINE ANALISI CODICE
------------------------------------
Grazie a tutti coloro che mi hanno aiutato :)

Ah, grazie Gaspare, ho letto l'email questa mattina :)
Buona giornata e buon lavoro. Spero di leggerti sul ng oggi :)))))