Funzione Msgbox

di il
6 risposte

Funzione Msgbox

Ciao a tutti. In pochi giorni ho aperto più thread ma essendo la materia vasta le mie lacune lo sono ancor di più. Vi pongo il quesito.
Ho una maschera principale chealimenta delle tabelle. Onde evitare che chi andrà ad alimentare il DB, possa dimenticarsi di inserire tutti i campi vorrei apportare dei controlli. In particolare, vorrei prevedere che in assenza della compilazione di alcuni campi venga restituito un messaggio.
Private Sub Form_Close()
If IsNull([Codice_attrib]) Then
MsgBox "Attenzione devi inserire la categoria", vbExclamation + vbRetryCancel, "Categoria"
End If
End Sub
Funziona, ma vorrei che invece di uscire dalla maschera, ottenuto il messaggio venga riportato alla stessa per poter conseguentemente inserire il dato mancante. Grazie

6 Risposte

  • Re: Funzione Msgbox

    Usa l'Evento UNLOAD che espone il Parametro CANCEL e forza tale parametro a FALSE in caso non si debba uscire...
  • Re: Funzione Msgbox

    ...sarà perchè sono alle prime volte con access ma non mi è molto chiaro quello che hai voluto intendere
  • Re: Funzione Msgbox

    Credo sia proprio per quello... le basi devi fartele... altrimenti i suggerimenti non servono, serve un corso ogni volta.

    Gli eventi si dividono in 2 macro tipi...!
    Quelli PRIMA e quelli DOPO l'azione.
    Quelli DOPO non possono che essere subiti, l'azione è già avvenuta.
    Quelli PRIMA possono essere gestiti, in quanto generati prima della conferma all'azione stessa.
    Quelli PRIMA espongono un Parametro definito CANCEL, che se FORZATO a TRUE ha il compito di ANNULLARE la prosecuzione dell'azione.

    NEl tuo caso se devi impedire la CHIUSURA non puoi usare CLOSE, è già avvenuta la chiusura...
    Devi usare UNLOAD che avviene prima e, condizioni la chiusura, sfruttando il Parametro CANCEL e lo forzi a TRUE su condizione(quella che hai esposto)...
  • Re: Funzione Msgbox

    ...ti ringrazio per la gentile delucidazione (anche questo è motivo di crescita)...buona giornata
  • Re: Funzione Msgbox

     Private Sub Form_Unload(Cancel As Integer)
    Dim campo1 As Boolean
    Dim campo2 As Boolean
    Dim campo3 As Boolean
    Dim campo4 As Boolean
    
    inizio:
    campo1 = False
    campo2 = False
    campo3 = False
    campo4 = False
    
    If Me.Testo100 = Null Then campo1 = True
    If Me.Codice_attrib = Null Then campo2 = True
    If Me.Gruppo = Null Then campo3 = True
    If Me.Sottomaschera_TabProtocolloSegnalazioni![Protocollo_segnalazione] = Null Then campo4 = True
    
    If IsNull(Me.Testo100) = True Then
    MsgBox ("inserisci campo1")
    Me.Testo100.SetFocus
    Exit Sub
    ElseIf IsNull(Me.Codice_attrib) = True Then
    MsgBox ("inserisci campo2")
    Me.Codice_attrib.SetFocus
    Exit Sub
    ElseIf IsNull(Me.Gruppo) = True Then
    MsgBox ("inserisci campo3")
    Me.Gruppo.SetFocus
    ElseIf IsNull([Sottomaschera_TabProtocolloSegnalazioni]![Protocollo_segnalazione]) = True Then
    MsgBox ("inserisci campo4")
    Me.[Sottomaschera_TabProtocolloSegnalazioni]![Protocollo_segnalazione].SetFocus
    Else
    DoCmd.Close
    End If
    End Sub
    

    Non so se ho seguito alla lettera il tuo consiglio, ma ho scritto la suindicata l'istruzione.
    Adesso ho uno strano problema.

    Se apro la maschera e non inserisco nulla quando esco (sia cliccando sulla x in alto a destra o cliccando sul pulsante di comando """INDIETRO"", mi restituisce sempre e comunque l'errore """Inserire il campo1"""" dopodichè chiude.

    So di sbagliare ma non so dove e soprattutto come andare a risolvere.
  • Re: Funzione Msgbox

    MarcoIpad ha scritto:


    Non so se ho seguito alla lettera il tuo consiglio, ma ho scritto la suindicata l'istruzione.
    No, perché nel codice non hai utilizzato il parametro Cancel.

    MarcoIpad ha scritto:


    Adesso ho uno strano problema.
    Se apro la maschera e non inserisco nulla quando esco (sia cliccando sulla x in alto a destra o cliccando sul pulsante di comando """INDIETRO"", mi restituisce sempre e comunque l'errore """Inserire il campo1"""" dopodichè chiude.
    Oltre a questa situazione di verifica prima della chiusura hai altro codice in qualche altro evento di qualche controllo che possa interferire? Se sì: toglilo.
    Prima sistemiamo la procedura di chiusura.
    (proseguo con la stesura del post, torna a rileggere dopo. Stesura definitiva ultimata)
    If Me.Testo100 = Null Then campo1 = True
    If Me.Codice_attrib = Null Then campo2 = True
    If Me.Gruppo = Null Then campo3 = True
    If Me.Sottomaschera_TabProtocolloSegnalazioni![Protocollo_segnalazione] = Null Then campo4 = True
    Si può riassumere questa parte dicendo che Testo100, Codice_attrib, Gruppo e Sottomaschera_TabProtocolloSegnalazioni![Protocollo_segnalazione] devono essere valorizzati altrimenti non si deve consentire la chiusura della maschera? Se sì (come immagino) imposterei il parametro cancel così
    Cancel = (Len(Me.Testo100 & "") = 0 OR  _
    Len(Me.Codice_attrib & "") = 0 OR _
    Len(Me.Gruppo & "") = 0 OR _
    (Me.Sottomaschera_TabProtocolloSegnalazioni![Protocollo_segnalazione] & "") = 0)
    E' sufficiente che una di queste condizioni sia verificata perché l'evento Unload sia cancellato perché il parametro Cancel è True.
    Prova quindi con un semplice
     Private Sub Form_Unload(Cancel As Integer)
        Cancel = (Len(Me.Testo100 & "")=0 OR  _
        Len(Me.Codice_attrib & "") = 0 OR _
        Len(Me.Gruppo & "") = 0 OR _
        Len(Me.Sottomaschera_TabProtocolloSegnalazioni![Protocollo_segnalazione] & "") = 0)
    End Sub
    Prova con questa, con le varie combinazioni (tutti i dati mancanti, uno solo, più di uno ecc) e quando hai capito il meccanismo passiamo alla segnalazione di cosa manca.
Devi accedere o registrarti per scrivere nel forum
6 risposte