Newsgroup: it.comp.appl.access
Titolo: controllo su before update

Ciao a tutti,
io ho una maschera basata su una maschera e voglio impedire che
l'utente inserisca dei record senza valorizzare alcuni campi. Ho
inserito questo codice sull'evento Before update della form
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim codErr As Byte
codErr = 0
Dim Style, Title, Response
Dim Mess1, Mess2, Mess3  As String
Style = vbOKOnly + vbCritical
Title = "Errore!"  ' Definisce il titolo.
Mess1 = "Valorizza il codice commessa prima di salvare il record!"
If IsNull(Me.CodiceCommessa.Value) Then
    codErr = 1
    Response = MsgBox(Mess1, Style, Title)
    Me.CodiceCommessa.SetFocus
    GoTo Exit_BeforeUpdate
End If
Exit_BeforeUpdate:
End Sub
Se provo a passare al record successivo con i pulsanti di spostamento
fra record ricevo il messaggio di errore per 2 volte, ma poi passa
comunque al record successivo.
Come faccio ad impedirlo????
Grazie
Lara

 ha scritto nel messaggio 
news:1173745396.7...@j27g2000cwj.googlegroups.com...

Ciao Lara,
vediamo se riesco ad esserti d'aiuto.
Innanzitutto ti dico che, per come li hai dichiarati tu, Mess1 e Mess2 non 
sono string  ma variant: questo pechè la virgola dopo di essi fa sì che 
assumano il valore di default, non il tipo di dato indicato per ultimo 
(almeno credo, mi pare che sia proprio così).
CodErr è dichiarato all'interno della routine ma poi, dopo la sua 
valorizzazione, non ne fai nessun uso: a cosa ti può servire ? Se pensi di 
doverlo utilizzare fuori di questa routine non lo devi dichiarare qui ma fra 
le variabili globali (in un modulo). Dichiarato qui e non utilizzato dentro 
la routine stessa non serve a nulla.
Utilizzi la msgbox in modo non appropriato in questo momento: la risposta 
dell'operatore non la gestisci, quindi puoi usare la forma più sintetica che 
indicherò dopo.
GoTo Exit_BeforeUpdate ti fa uscire dalla routine come se tutto fosse andato 
bene: probabilmente tu volevi impedire l'uscita dal controllo e costringere 
l'operatore a valorizzarlo opportunamente. In questo caso devi impostare a 
True il parametro Cancel, così la routine saprà comportarsi di conseguenza. 
Un'ultima cosa: per uscire dalla routine va benissimo l'istruzione che hai 
usato, ma è più semplice da scrivere e meno soggetta ad errori l'istruzione 
"Exit sub".
Quindi, io farei così:
Private Sub Form_BeforeUpdate(Cancel As Integer)
''' Dim codErr As Byte
''' codErr = 0
Dim Style as integer, Title as string   '(il resto non lo utilizzi: 
Response)
Dim Mess1 as string, Mess2as string , Mess3  As String
Style = vbOKOnly + vbCritical
Title = "Errore!"  ' Definisce il titolo.
Mess1 = "Valorizza il codice commessa prima di salvare il record!"
If IsNull(Me.CodiceCommessa.Value) Then
'''   codErr = 1
'''   Response = MsgBox(Mess1, Style, Title)
   msgbox mess1,style,title
   cancel = true
   exit sub  '(anche se non serve perchè dopo questo if la routine non fa 
nient'altro)
'''   Me.CodiceCommessa.SetFocus
'''   GoTo Exit_BeforeUpdate
End If
Exit_BeforeUpdate:
End Sub
Perciò, se codicecommessa non è valorizzato, allora esce dopo aver messo in 
ON (true) il parametro della routine Cancel, altrimenti esce in modo 
naturale, quindi il Cancel rimane in OFF (false).
Ciao
Antonio

 Quindi, io farei cosě:
Grazie avevo dimenticato cancel = true.
Vista la estrema precisione e competenza della tua risposta ne approfitto
per chiederti una cosa che č legata al problema di prima.
Come devo fare per impedire la visualizzazione del messaggio di sistema "Il
campo x non puň contenere un valore Null perchč impostato a required...". Ho
provato a disabilitare i warning su Form_Current :
DoCmd.SetWarnings False
ma non funziona.
Attendo un'altra "bacchettata" :-)
Lara
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Come faccio ad impedirlo????
Ti manca un docmd.cancelvent prima della fine della sub...
cia'
Max


Nel prezioso sito di Karl Donaubauer, alla pagina 
http://www.donkarl.com/it/FAQ/FAQ2Generale.htm#2.4
, trovi importanti note 
sulla disattivazione dei messaggi.
Io utilizzo queste istruzioni appena entro nell'applicazione:
Application.SetOption "Confirm Record Changes", False
Application.SetOption "Confirm Document Deletions", False
Application.SetOption "Confirm Action Queries", False
e poi, all'uscita dall'applicazione, le rimetto a True, altrimenti Access 
non mi chiederà conferma neppure quando cancello inavvertitamente una 
maschera
Ciao
Antonio