Newsgroup: it.comp.appl.access
Titolo: Evitare errore su Null in una combobox

In un form ho una combobox in cui devo scegliere un valore. Poiché il
mio scopo è un uso sciolto della maschera senza tanti impicci, vorrei
sapere come evitare queste due circostanze:
1) evitare che digitando un valore non in elenco appaia il messaggio
di errore di windows e sostituirlo con uno mio personalizzato (es: "La
tua scelta è limitata ai codici scuola predisposti"), in seguito al
quale (click su "OK") rimango comunque libera di passare ad un altro
controllo della maschera;
2) evitare che, chiusa la msgbox di cui sopra, non si apra l'elenco a
tendina di modo che io possa eventualmente passare subito ad un altro
controllo;
3) evitare che cancellando un valore digitato, anche non in elenco,
compaia il messaggio di errore che ammonisce sull'assegnazione di un
valore Null per una variabile non variant, costringendomi a rimanere
sulla combobox fintantoche non inserisco un valore dell'elenco.
In pratica, a prescindere che io selezioni un valore nella combo o lo
inserisca non in elenco, venendone cassata, o lo cancelli, voglio
passare da un punto all'altro della maschera senza impicci, rimandando
all'afterupdate del form il controllo di presenza o meno del valore
(obbligtorio) nella combo.
Alla combobox  è associato un integer, ha tre colonne, di cui visibili
la seconda e la terza (stringhe). la seconda fa da valore
visyulaizzato.
Grazie per l'attenzione..

 ha scritto nel 
messaggio 
news:d98d622a-a3f4-4ba8...@a4g2000yqg.googlegroups.com...
In un form ho una combobox in cui devo scegliere un valore. Poiché il
mio scopo č un uso sciolto della maschera senza tanti impicci, vorrei
sapere come evitare queste due circostanze:
1) evitare che digitando un valore non in elenco appaia il messaggio
di errore di windows e sostituirlo con uno mio personalizzato (es: "La
tua scelta č limitata ai codici scuola predisposti"), in seguito al
quale (click su "OK") rimango comunque libera di passare ad un altro
controllo della maschera;
utilizza l'evento "su non in elenco"
vedi anche esempi dell'help
2) evitare che, chiusa la msgbox di cui sopra, non si apra l'elenco a
tendina di modo che io possa eventualmente passare subito ad un altro
controllo;
come sopra, annullando l'inserimento precedente
3) evitare che cancellando un valore digitato, anche non in elenco,
compaia il messaggio di errore che ammonisce sull'assegnazione di un
valore Null per una variabile non variant, costringendomi a rimanere
sulla combobox fintantoche non inserisco un valore dell'elenco.
----
a parte che se fai ESC non ti dovrebbe piu dare l'errore, come sopra 
dovrebbe risolverti la questione
In pratica, a prescindere che io selezioni un valore nella combo o lo
inserisca non in elenco, venendone cassata, o lo cancelli, voglio
passare da un punto all'altro della maschera senza impicci, rimandando
all'afterupdate del form il controllo di presenza o meno del valore
(obbligtorio) nella combo.
-------
uhmmm
e se a questo punto la combo non la metti solo in elenco e nella validazione 
della form ci metti nel codice una dlookup del valore inserito e se non lo 
trova ti sputa?
Antonio 

 trova ti sputa?
 cheee?

 ha scritto nel 
messaggio 
news:d98d622a-a3f4-4ba8...@a4g2000yqg.googlegroups.com...
In un form ho una combobox in cui devo scegliere un valore. Poiché il
mio scopo č un uso sciolto della maschera senza tanti impicci, vorrei
sapere come evitare queste due circostanze:
1) evitare che digitando un valore non in elenco appaia il messaggio
di errore di windows e sostituirlo con uno mio personalizzato (es: "La
tua scelta č limitata ai codici scuola predisposti"), in seguito al
quale (click su "OK") rimango comunque libera di passare ad un altro
controllo della maschera;
2) evitare che, chiusa la msgbox di cui sopra, non si apra l'elenco a
tendina di modo che io possa eventualmente passare subito ad un altro
controllo;
3) evitare che cancellando un valore digitato, anche non in elenco,
compaia il messaggio di errore che ammonisce sull'assegnazione di un
valore Null per una variabile non variant, costringendomi a rimanere
sulla combobox fintantoche non inserisco un valore dell'elenco.
In pratica, a prescindere che io selezioni un valore nella combo o lo
inserisca non in elenco, venendone cassata, o lo cancelli, voglio
passare da un punto all'altro della maschera senza impicci, rimandando
all'afterupdate del form il controllo di presenza o meno del valore
(obbligtorio) nella combo.
Alla combobox  č associato un integer, ha tre colonne, di cui visibili
la seconda e la terza (stringhe). la seconda fa da valore
visyulaizzato.
Grazie per l'attenzione..
---------------------------------------------------
Su non in elenco potresti scrivere qualcosa del genere:
MsgBox "Selezionare correttamente l'oggetto del provvedimento"
Me.NomeCasellaCombinata.Undo
Response = 0
Me.NomeControlloSuCuiSpostarsi.SetFocus
Ciao, Carlo 

 Ciao, Carlo
Niente, se digito qualcosa e poi la cancello compare msgbox:
"Impossibile assegnare null a variablile non di tipo variant"..

On 18 Ago, 14:58, Francesca Chiarelli

Prova così:
Private Sub CasellaCombinata0_NotInList(NewData As String, Response As
Integer)
Response = acDataErrContinue
Me.CasellaCombinata0 = vbNullString
DoCmd.GoToControl "testo2"
End Sub
Ciao
Sergio

 "Impossibile assegnare null a variablile non di tipo variant"..
Copia+incolla il tuo codice.
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 


adesso non mi funziona nemmeno con questo:
Private Sub cboOggetto_Change()
    If IsNull(Me.cboOggetto) Or Me.cboOggetto = "" Then
       Me.cboOggetto.Undo
    End If
End Sub
Private Sub cboOggetto_NotInList(NewData As String, Response As
Integer)
    MsgBox "Selezionare correttamente l'oggetto del provvedimento"
    Me.cboOggetto.Undo
    Response = acDataErrContinue
End Sub

..e non va nemmeno questo:
Private Sub cboOggetto_Change()
    If IsNull(Me.cboOggetto) Or Me.cboOggetto = "" Then
       Me.cboOggetto = vbNullString
    End If
End Sub
Private Sub cboOggetto_NotInList(NewData As String, Response As
Integer)
    MsgBox "Selezionare correttamente l'oggetto del provvedimento"
    Me.cboOggetto = vbNullString


 "cancello" come?
ad esempio, digito "xyz" e poi cancellavo col tasto delete; passavo
altrove nella maschera, e mi appariva quel messaggio sul null. deduco
che digitando e abbandonando il focus del controllo Access scateni
l'evento AfterUpdate, cogliendo un valore Null non ammissibile (perché
estraneo alla fonte dati della combo o perché non asociabile ad un
controllo di tipo combo??).
La guida dice:"Gli eventi BeforeUpdate e AfterUpdate per un record si
verificano dopo aver immesso nel record dati nuovi o modificati ed
essere passati a un altro record oppure dopo aver scelto Salva record
dal menu Record, pertanto dopo che si è verificato l'evento Dirty per
il record".
Adesso faccio delle prove per capire meglio.
(chiedo scusa per le banalità che dico e scrivo, ma sono alle prime
armi..)
Grazie a tutti

 ... e non va nemmeno questo:
Private Sub cboOggetto_Change()
    If IsNull(Me.cboOggetto) Or Me.cboOggetto = "" Then
       Me.cboOggetto = vbNullString
    End If
End Sub
Private Sub cboOggetto_NotInList(NewData As String, Response As
Integer)
    MsgBox "Selezionare correttamente l'oggetto del provvedimento"
    Me.cboOggetto = vbNullString


è assurdo, prima queste righe funzionavano, ora non più!!!

 è assurdo, prima queste righe funzionavano, ora non più!!!
ehm...scusate il post pasticciato.
Dunque, queste righe funzionano:
Private Sub cboOggetto_Change()
    If IsNull(Me.cboOggetto) Or Trim(Me.cboOggetto.Text) = "" Then
       Me.cboOggetto.Undo
    End If
End Sub
Private Sub cboOggetto_NotInList(NewData As String, Response As
Integer)
    Set ctl = Me.cboOggetto
    MsgBox "Selezionare correttamente l'oggetto del provvedimento"
    Me.cboOggetto.Undo
    Response = acDataErrContinue
End Sub
queste invece no:
Private Sub cboOggetto_Change()
    If IsNull(Me.cboOggetto) Or Me.cboOggetto = "" Then
       Me.cboOggetto.Undo
    End If
End Sub
Private Sub cboOggetto_NotInList(NewData As String, Response As
Integer)
    MsgBox "Selezionare correttamente l'oggetto del provvedimento"
    Me.cboOggetto.Undo
    Response = acDataErrContinue
End Sub
Perché?

         Me.cboOggetto.Undo
Alora qui mi trattano da "calimero" perche', dicono, non sopporto e non 
so iffare. (fare le if)
Comunque per rispetto alla mia nomea
If IsNull(Me.cboOggetto) Or Trim(Me.cboOggetto.Text) = "" Then
io l'avrei scritta cosi' :
If "" & Trim(Me.cboOggetto.Text) = "" Then
C'e' una profonda differenza fra:
Trim(Me.cboOggetto.Text) = ""
e
Me.cboOggetto = ""
e non per l'uso della trim ma perche' la prima funziona sulla proprieta' 
.Text mentre la seconda fa riferimanto alla proprieta' .Value
Nell'evento di "change" si "deve" usare la .Text.
Tra l'altro (la mia istruzione lo evita) quando si fanno if su un 
"affare" null spesso il risultato non e' quello che ci si aspetta
Ho letto che leggi l'Help li puoi trovare qualcosa su questo'ultimo 
comportamento da me citato
Ad majora
[cut]
-- 
ac (x=y-1)

 ha scritto nel 
messaggio 
news:687145da-af9f-4362...@o26g2000vbi.googlegroups.com...
cut
Qualche domanda.
Hai considerato la mia soluzione per il messaggio di errore predefinito di 
Access su NotInList?
Perchè setti la variabile ctl con Set ctl = Me.cboOggetto
visto che hai il nome del controllo e dunque perfettamente inutile la 
variabile ctl?
Per caso la combo è associata? Se sì, nella tabella hai impostato per quel 
campo "Consenti lunghezza zero" a sì e "Richiesto" su no?
Ciao, Carlo 

 Ciao, Carlo
A me sembra che così funzioni:
Private Sub CasellaCombinata0_NotInList(NewData As String, Response As
Integer)
Response = acDataErrContinue
Me.CasellaCombinata0 = vbNullString
DoCmd.GoToControl "testo2" 'altro controllo qualsiasi della form
MsgBox "immissione non valida"
End Sub
R.S.V.P.
Ciao, Sergio

 trova ti sputa?
 cheee?
Allora
nella combo accetta tutto
ad un certo ci sarà del codice di validazione di quanto inserito
controlli che il valore inserito nella combo sia presente nella tabella 
puntata dalla combo stessa
si fa con un dlookup (vedi help)
se c'è ok, se non c'è non mandi avanti
Antonio 

 Ciao, Carlo
A me sembra che cosě funzioni:
Private Sub CasellaCombinata0_NotInList(NewData As String, Response As
Integer)
Response = acDataErrContinue
Me.CasellaCombinata0 = vbNullString
DoCmd.GoToControl "testo2" 'altro controllo qualsiasi della form
MsgBox "immissione non valida"
End Sub
R.S.V.P.
Ciao, Sergio
-----------------------------
Sě, puň andare anche cosě.
Ciao, Carlo 

se c'è ok, se non c'è non mandi avanti
chiaro, era quel "sputa" che mi aveva tratta in inganno..
cmq adesso mi funziona tutto (secondo quanto voluto) con queste righe:
Private Sub cboOggetto_Change()
    If Trim(Me.cboOggetto.Text) = "" Then
       Me.cboOggetto.Undo
    End If
End Sub
Private Sub cboOggetto_NotInList(NewData As String, Response As
Integer)
    MsgBox "Selezionare correttamente l'oggetto del provvedimento"
    Me.cboOggetto.Undo
    Response = acDataErrContinue
End Sub
 Ringrazio tutti voi, siete stati molto carini ;-)

 ha scritto nel 
messaggio 
news:e2e012e1-ef18-4b19...@f7g2000vba.googlegroups.com...
cut
mentre
la proprietą "Consenti lunghezza zero" non ho idea di dove sia!
Nelle proprietą del campo nella tabella.
Ciao, Carlo 

 Ciao, Carlo
non c'è! immagino perché sia un campo long..

 Ciao, Carlo
non c'�! immagino perch� sia un campo long..
------------
Esatto.
C'� comunque la propriet� "Richiesto" che potrebbe servirti.
Ciao, Carlo