Valore obbligatorio sottomaschera

di il
11 risposte

Valore obbligatorio sottomaschera

Salve,
ho una mascheramadre la quale ha due sottomaschere (sottomaschera1 e sottomaschera2). Quando "campoA" di sottomaschera1 non è vuoto ci deve obbligatoriamente essere un valore in "campoB" di sottomaschera2. Per adesso, non appena l'utente digita sul campo "A", access manda un messaggio e mette il focus su "campoB" di sottomaschera2, così :
If Not IsNull(campoA) Then
MsgBox "riempi campoB"
Forms![mascheramadre]![sottomaschera1].SetFocus
Forms![mascheramadre]![sottomaschera1]campoB.SetFocus
End If
A questo punto vorrei che non mi facesse uscire da "campoB" se questo non viene compilato (considerare che su "campoB" c'è già un valore che deve essere ridigitato per creare il record). Ho provato con Cancel = true ma non riesco a trovare la sintassi giusta per farlo.

Spero di essermi spiegato. Grazie a chi mi aiuterà

11 Risposte

  • Re: Valore obbligatorio sottomaschera

    So di non rispondere alla lettera, perchè tu hai chiesto

    skipperdan ha scritto:


    vorrei che non mi facesse uscire da "campoB" se questo non viene compilato
    eppure io, invece del MsgBox, dopo il SetFocus su CampoB (se è di tipo testo) gli imposterei proprio il valore "Sono qui e digita qualcosa" oppure "riempimi"...che mi sembra una idea chiara ed evidente...
    Boh! Altrimenti attendi una risposta più esperta.
  • Re: Valore obbligatorio sottomaschera

    Infatti mi restituisce il messaggio "non ti dimenticare etc." ma voglio che non mi faccia uscire se non digito il valore !
  • Re: Valore obbligatorio sottomaschera

    Secondo me si tratta di ottimizzare un evento su CampoB quale può essere (non saprei) "Prima di aggiornare", "In attesa", "Su modifica"...bisogna fare un po' di prove. Quello che non mi convince di questa (eventuale) scelta sarebbe che se tu volessi posizionarti per caso su CampoB (indipendentemente da quel giochetto VBA) anche con il solo tasto TAB, poi saresti costretto a digitare qualcosa. Ti conviene?
    Sono dell'avviso che queste scelte talvolta possono rivelarsi delle armi a doppio taglio.
    Ripeto, potrei sbagliarmi e/o essere limitato dalle mie conoscenze. Un parere più esperto sarebbe più confortante.
  • Re: Valore obbligatorio sottomaschera

    Devi usare un evento che avviene PRIMA e che consente il Cancel.
    Mi pare che l'evento Exit del controllo esponga Cancel...
    Ora ti basta forzare Il parametro Cancel=True per annullare l'Exit su condizione... nel tuo caso verifica il contenuto...
  • Re: Valore obbligatorio sottomaschera

    Grazie Alex della risposta.
    Ho provato a mettere il codice, con aggiunta di Cancel=True, nell'evento Exit ed accade che, solo quando chiudo la mascheramadre, mi manda il messaggio che devo inserire il dato nel "campoB". Io vorrei invece che il cursore restasse nel "campoB" di sottomaschera2 e ne uscisse solo dopo la digitazione.
    Credo che faccia così perchè ho messo il codice nel "campoA" di sottomaschera1 mentre "campoB" è in sottomaschera2. Dovrei far capire ad access che da sottomaschera1 (il campoA) deve riferirsi a sottomaschera2 (il campoB) come ho fatto per il focus, ma non sono riuscito a trovare la sintassi giusta.
    Grazie.
  • Re: Valore obbligatorio sottomaschera

    Scusa, ma se deve essere obbligatorio il "campoB" nella "sottomaschera2", perché non agisci su questo ?
  • Re: Valore obbligatorio sottomaschera

    Si Willy, hai ragione, sembrava più logico anche a me ma non riuscivo a trovare la giusta sintassi per dire ad access che doveva essere obbligatorio campoB in sottomaschera2 quando PERO' era stato digitato campoA in sottomaschera1. Attendo suggerimenti.
    Grazie.
  • Re: Valore obbligatorio sottomaschera

    L'obbligatorietà di inserimento non si definisce a livello di Maschera ma di Tabella eventualmente, questo è un motivo per cui prima di prendere questa strada serve tu abbia le idee chiare se poi in altre ti serve il medesimo comportamento, in quanto poi attivato a livello di tabella va da se che viene riprodotto ovunque.
    In questo caso devi rilevatre l'errore su Evento Form_Error e gestirlo.
    Se non ricordo male sono questi:
    
    Private Const ERR_NULLVALUE = 3162
    Private Const ERR_ZEROLENGTHSTRING = 3315
    Di solito proprio per il fatto che non è detto si debba gestire sempre tutto allo stesso modo, potrebbe essere preferibile gestire a livello di Maschera in quanto è possibile Customizzare.

    Tuttavia di solito non è bellissimo usare le Maschere CONTINUE per l'insert o editing... perchè sono rognose... a vantaggio di Form_Detail con il Record singolo ed addirittura con Pulsante di Conferma... che sembra una cosa stupida, ma salva sempre la situazione... anche nel tuo caso.
  • Re: Valore obbligatorio sottomaschera

    Alex, non so cosa significa rilevare l'errore su evento Form_Error e non saprei come gestirlo. Dove dovrei mettere il codice ? in campoA ?
    Non sono un programmatore, parlami da uomo della strada
  • Re: Valore obbligatorio sottomaschera

    skipperdan ha scritto:


    Alex, non so cosa significa rilevare l'errore su evento Form_Error e non saprei come gestirlo. Dove dovrei mettere il codice ? in campoA ?
    Non sono un programmatore, parlami da uomo della strada
    Peccato che non siamo in strada ma in un forum tecnico in cui un MINIMO di formzione serve.

    Come spiegato nell'altro 3D devi studiare cosa sono gli ERORRI perchè sono una delle cose più importanti nell'uso consapevole ed ottimizzato del codice.
    Gli errori possono essere generati in ogni Funzione/Sub e ce ne sono alcuni che vengono generati come Generici a livello di Maschera sull'evento specifico ERROR di Form.
    Ogni errore ha un codice, ed imparando a conoscerli sono un ottimo modo per snellire i controlli e le azioni conseguenti.

    Devi prendere un buon Libro e iniziare a studiare qualche concetto di base.
  • Re: Valore obbligatorio sottomaschera

    Certo, la mia era una battuta.. Non ho come obiettivo finale la programmazione ed è per questo che rimando sempre lo studio di Access ma in realtà sento il naturale bisogno di approfondire, cosa che farò se dovessi continuare ad usarlo.
    Tornando al mio caso, non dà nessun errore, non considera affatto il cancel=true. Con il SetFocus sono riuscito a trovare la sintassi per andare da campoA / sottomaschera1 a campo2 / sottomaschera2 e mi sto chiedendo se occorra trovare la sintassi giusta (come ho fatto per SetFocus) per portare il cancel=true dal campoA (in cui c'è l'evento con il suo codice) a campoB.
    Grazie.
Devi accedere o registrarti per scrivere nel forum
11 risposte