Newsgroup: it.comp.appl.access
Titolo: Controllo campi e combo su maschera inserimento dati ed ottenere messaggio errore se vuoto o nullo

Come da oggetto , cerco info per poter risolvere un problema inerente
ad una maschera di inserimento dati che spesso riceve valori vuoti o
nulli.
Mi sono sfogliato ed ho ricercato sul NG ma ho trovato soluzioni
solamente in parte inerenti al mio problema.
Da quanto mi è dato sapere il cotnrollo potrebbe essere fatto o
settando le proprietà nella tabella (o campo) dell'argomento valido se
" is not null " e scegliere un messaggio di errore... ma qui sorge un
problema, il messaggio appare solo nel caso in cui viene messo un
valore , poi si deleta e ci si sposta col mouse ... se invece uso il
tasto tab o , nella combobox premo il tasto esc , il valore della
combo o casella , passa ad empty e non viene effettuato alcun
controllo. A tal fine ho trovato qualcosa sul NG :
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Nz(Me!combocitta, "") = "" Or IsEmpty(Me!combocitta) Then
        MsgBox "A coso, te sei scordato de mette er cognome!"
        Me!combocitta.SetFocus
End If
End Sub
c'è però un problema , se l'utente che inserisce i dati nella
tabella , clicca per chiudere la maschera o se clicca nella combo per
effettuare la ricerca di un cliente (non sapendo o dimenticandosi si
aver riempito la combo città) , la maschera prima da la msg box con
l'errore poi però o chiude ma maschera (se ho cliccato su chiudi) o
passa al nuovo cliente (se ho usato la combo per la ricerca).
Sul sito comune c'è un codice (che però non intercetta gli empty) che
dovrebbe (dico dovrebbe perchè sul mio mdb non va) su aggiornamento
dati intercettare i campi nulli ed evidenziarli mettendoli su sfondo
rosso e portando il cursore ...
Sapreste dirmi come correggere il codice sopra per fare in modo che
prima di chiudere o cercare il nuovo cliente , si debba per forza
popolare il campo o la combo?
Grazie a tutti e scusate se sono stato un pò lungo ma da quello che ho
visto è un "problema" comune e che andrebbe approfondito.

 ha scritto nel messaggio
news:1170348657....@q2g2000cwa.googlegroups.com...




Perchè dici Empty....?
Un controllo non credo possa assumere valore Empty, ma solo Null o
vbNullstring.
L'help fa riferimento a IsEmpty in caso di INIZIALIZZAZIONE di Variabili
quindi a mio avviso
il test su un controllo sarà sempre False.
Nel tuo caso ti basta controllare il vbNullString o il Null, che però hai
già fatto usando la funzione
NZ(Controllo,""), forse il tuo problema è dove inserire il controllo...?
Prova a dare un'occhiata a questo DEMO, magari a quello semplice dei 2
proposti....
http://www.alessandrobaraldi.it/DettaglioFaq.asp?IdFAQ=156
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

 ha scritto nel messaggionews:1170348657....@q2g2000cwa.googlegroups.com...

Dimenticavo , il DB è in Access 97 ... non riesco a leggere i tuoi
esempi

Dimenticavo , il DB è in Access 97 ... non riesco a leggere i tuoi
esempi
Peccato....
Il test lo puoi eseguire su Exit del controllo specifico, ed in
aggiunta su
BeforeUpdate di Form.
Ovvio che questo si scatena solo prima del SALVATAGGIO, ed al suo
interno
dovrai controllare
o ciclare tutti i Controlli che devono essere Validati.
Ti assicuro che se testi Len(Controllo)>0 Or IsNull(Controllo) non può
sfuggirti.
Ciao



Stasera li guardo da casa dove ho altre versioni di Access, grazie
mille.
Posso contattarti tramite mail per avere delucidazioni (e ne avrò
bisogno nona avendo grandi nozioni di Vba) qualora ne avessi bisogno?
Grazie

Stasera li guardo da casa dove ho altre versioni di Access, grazie
mille.
Posso contattarti tramite mail per avere delucidazioni (e ne avrò
bisogno nona avendo grandi nozioni di Vba) qualora ne avessi bisogno?
Grazie
Direi che è meglio mantenere, per quanto possibile, l'argomento di dominio
del NG.



Ok allora stasera lo guardo e domani provo , se trovo problemi posto
ilcodice con la parte inerente il problema.
Grazie :)

Ok allora stasera lo guardo e domani provo , se trovo problemi posto
ilcodice con la parte inerente il problema.
Grazie :)
Quei demo su A97 non funzioneranno mai... quindi prendili solo come esempio,
ma se non hai molta dimesticheza in VBA rischiano di metterti fuori strada
in quanto usa le Classi e le interfacce, cosa non molto diffusa....



Ho controllato i tuoi demo e per me sono come arabo :) , bene o male
nell'evento after update so che inserisco i controlli da verificarte e
un pò mi ci raccapezzo ... li invece no ... potreste illuminarmi?
grazie

 grazie
Non per non volere insegnarti, ma come ti dicevo quei demo sono
complessi per chi ha già poche basi, quindi per riuscire a spiegarteli
dovrei farti un corso di VB e della programmazione ad Oggetti, e non
credo sia possibile....
Lasciali perdere e vedi se seguendo il consiglio dato dopo riesci a
farlo andare.
@Alex


Veramente come consiglio ho letto solo quello sulle classi , che devo
fare? potete dirmi come bloccre il codice in caso di exit su una
maschera con campo vuoto e spostare il cursore su quel campo?
grazie

 grazie- Nascondi testo tra virgolette -
Veramente hai letto male oppure non tutto....!
Io ti ho suggerito nell'ultimo post come fare, se vuoi rileggere e
riprovare vedi tu...
@Alex

 wrote:

Ecco , ti riferivi a questo  :) ma così facendo intercetto solo il
campo non vuoto ma il cursore non si posiziona li o sbaglio?

 - Mostra testo tra virgolette -
Mi riferivo a questi:
Perchè dici Empty....?
Un controllo non credo possa assumere valore Empty, ma solo Null o
vbNullstring.
L'help fa riferimento a IsEmpty in caso di INIZIALIZZAZIONE di
Variabili
quindi a mio avviso
il test su un controllo sarà sempre False.
Nel tuo caso ti basta controllare il vbNullString o il Null, che però
hai
già fatto usando la funzione
NZ(Controllo,""), forse il tuo problema è dove inserire il
controllo...?
ed anche a questo:
Il test lo puoi eseguire su Exit del controllo specifico, ed in
aggiunta su
BeforeUpdate di Form.
Ovvio che questo si scatena solo prima del SALVATAGGIO, ed al suo
interno
dovrai controllare
o ciclare tutti i Controlli che devono essere Validati.
Ti assicuro che se testi Len(Controllo)>0 Or IsNull(Controllo) non
può
sfuggirti.
Saluti
@Alex


Mi sento alquanto deficente :) ... sono molto scarso in vba e quello
che sò lo ho appreso tramite NG sfogliando ed adattando , ti chiedo
dunque un pò di pazienza.
Ho messo questo codice (sperando di aver capito ciò che volevi dirmi):
Private Sub Form_BeforeUpdate(Cancel As Integer)
     If Len(combocitta) > 0 Or IsNull(combocitta) Then
         MsgBox "Il numero scheda è obbligatorio e non può essere 0"
         ' Se l'operatore ha sbagliato cancello il contenuto.
        Cancel = True
        Me!combocitta.SetFocus
        End If
End Sub
così facendo mi esce la msgbox ma oltre al fatto che si chiude non
appena clicco su ok , ho notato che esce anche se il campo città è
popolato... al che ho pensato che l'errore era su len(combocitta) > 0
(ho detto ma io lo voglio maggiore di 0 ) ed ho sostituito il > con
< ... risultato non esce niente ...
Per quando riguarda empty , leggevo su NG che se il campo viene
popolato e poi svuotato tramite esc o bypassandolo con tab , assume
valore empty e quindi bisognava intercettarlo. (non garantisco niente
dato che l'ho solo letto e come avrai inteso sono scarso in VBA)

Prova cosě:
Private Sub Form_BeforeUpdate(Cancel As Integer)
     If Len(combocitta) = 0 Or IsNull(combocitta) Then
         MsgBox "Il numero scheda č obbligatorio e non puň essere 0"
         ' Se l'operatore ha sbagliato cancello il contenuto.
        Cancel = True
        Me!combocitta.SetFocus
     End If
End Sub
Per quando riguarda empty , leggevo su NG che se il campo viene
popolato e poi svuotato tramite esc o bypassandolo con tab , assume
valore empty e quindi bisognava intercettarlo. (non garantisco niente
dato che l'ho solo letto e come avrai inteso sono scarso in VBA)
Direi che l'unica č provare....!


 ---------------------------------------------------------------------------
Grazie Alessandro , così sembra funzionare nel senso che effettua il
controllo , sia che uso tab sia esc sia che cancello un valore che vi
era prima su combocitta, mi da la msgbox, permane però il problema
della chiusura form senza dare l'opportunità di poter riempire la
combocittà così da validare il record. Praticamente non ti accorgi
neanche che effettui il setfocus perchè chiude all'istante.

 neanche che effettui il setfocus perchè chiude all'istante.- Nascondi testo tra virgolette -
Li devi effettuare il test su Unload e forzare sempre il Cancel=true.
@Alex


quindi oltre al codice su before update dovrei anche mettere qualcosa
del genere su unload? :
 Private sub Form_Unload(Cancel as Integer)
    If Len(combocitta) > 0 Or IsNull(combocitta) Then
         MsgBox "Il numero scheda è obbligatorio e non può essere 0"
         ' Se l'operatore ha sbagliato cancello il contenuto.
        Cancel = True
        Me!combocitta.SetFocus
        not DoCmd.Close 'questa me la sono inventata sul momento dato
che non sò come dirgli di non chiudere (perdona la mia ignoranza)
 end if
 End Sub
so gia che not docmd è errato ma non sò che codice si debba
mettere ...
Urge un testo per vba lo sò :)

Prova questo:
 Private sub Form_Unload(Cancel as Integer)
    If Len(combocitta) > 0 Or IsNull(combocitta) Then
         MsgBox "Il numero scheda è obbligatorio e non può essere 0"
         ' Se l'operatore ha sbagliato cancello il contenuto.
        Cancel = True
        Me!combocitta.SetFocus
 end if
 End Sub
Non serve dirgli di non chiudere la Maschera il Cancel=True non fà altro che
annullare
l'evento.... quindi non si chiude...!
Leggiti l'help però... poichè quando non si sanno le cose si devono
leggere...!



Hmm avevo letto l'Help ma non trovavo riferimenti a cancel=true... mi
sa che sono stato superficiale.
C'è un problema , con il codice che mai messo , rimane in loop sia che
metto il valore sulla combo sia che non lo metto ... risultato non mi
fa entrare in struttura e devo killare access.
Come mai^?


Trovato l'errore :
 If Len(combocitta) > 0 Or IsNull(combocitta) Then
         MsgBox "Il numero scheda è obbligatorio e non può essere 0"
praticamente è normale che mi dia sempre la msg box con inserire città
anche se la inserisco ... infatti se metto un valore combocittà sarà >
0  per cui ti da la msg .
ho risolto così:
Private Sub Form_Unload(Cancel As Integer)
    If IsNull(combocitta) Or IsEmpty(combocitta) Then
         MsgBox "Il campo città è vuoto , inserire la città"
         ' Se l'operatore ha sbagliato cancello il contenuto.
        Cancel = True
        Me!combocitta.SetFocus
 End If
 End Sub
e settando sulla tabella il valido se is not null con un messaggio nel
caso non lo fosse.
praticamente mi ha illuminato questo:
Il valore Null indica che la variabile Variant non contiene dati
validi. Il valore di tipo Null è quindi diverso dal valore di tipo
Empty, che indica che una variabile non è stata ancora inizializzata.
Non ha inoltre lo stesso significato di una stringa di lunghezza zero
(""), definita a volte stinga nulla.
ora se la stringa non viene inizializzata, il controllo su empty mi da
la msg ... se viene inizializzata e poi variata , ci pensa il
controllo sul valido se... se viene inserito invece un valore di tipo
null , ci pensa il codice su unload.
Ringrazio Alessandro per le delucidazioni e i consigli per arrivare al
risultato finale.